Diff
Copied: branches/events/.gitignore (from rev 3490, trunk/.gitignore) (0 => 3491)
--- branches/events/.gitignore (rev 0)
+++ branches/events/.gitignore 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,6 @@
+/index
+/.project
+/tmp
+/log
+/Gemfile.lock
+.redcar
Copied: branches/events/.rvmrc (from rev 3490, trunk/.rvmrc) (0 => 3491)
--- branches/events/.rvmrc (rev 0)
+++ branches/events/.rvmrc 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,48 @@
+#!/usr/bin/env bash
+
+# This is an RVM Project .rvmrc file, used to automatically load the ruby
+# development environment upon cd'ing into the directory
+
+# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
+# Only full ruby name is supported here, for short names use:
+# echo "rvm use 1.8.7" > .rvmrc
+environment_id="address@hidden"
+
+# Uncomment the following lines if you want to verify rvm version per project
+# rvmrc_rvm_version="1.16.16 (stable)" # 1.10.1 seams as a safe start
+# eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
+# echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
+# return 1
+# }
+
+# First we attempt to load the desired environment directly from the environment
+# file. This is very fast and efficient compared to running through the entire
+# CLI and selector. If you want feedback on which environment was used then
+# insert the word 'use' after --create as this triggers verbose mode.
+if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
+then
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
+ [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
+ \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
+else
+ # If the environment file has not yet been created, use the RVM CLI to select.
+ rvm --create "$environment_id" || {
+ echo "Failed to create RVM environment '${environment_id}'."
+ return 1
+ }
+fi
+
+# If you use bundler, this might be useful to you:
+if [[ -s Gemfile ]] && {
+ ! builtin command -v bundle >/dev/null ||
+ builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
+}
+then
+ printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
+ gem install bundler
+fi
+if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
+then
+ bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
+fi
Modified: branches/events/Gemfile (3490 => 3491)
--- branches/events/Gemfile 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/Gemfile 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,9 +1,7 @@
source "http://rubygems.org"
-gem "rails", "2.3.14"
-gem "mysql", "~> 2.8.1"
-gem "mongrel", "~> 1.1.5"
-gem "mongrel_cluster", "~> 1.0.5"
+gem "rails", "2.3.17"
+gem "mysql2", "~> 0.2.18"
gem "rubyzip", "~> 0.9.4"
gem "oauth", "~> 0.4.3"
gem "libxml-ruby", "2.2.2"
@@ -14,9 +12,19 @@
gem "curb", "~> 0.7.8"
gem "marc", "~> 0.4.3"
gem "ruby-hmac", "~> 0.4.0"
-gem "passenger", "~> 2.2.15"
+gem "passenger", "~> 3.0.19"
gem "htmlentities", "~> 4.3.1"
gem "taverna-scufl", "~> 0.7.2"
-gem "taverna-t2flow", "~> 0.3.0"
-gem "workflow-to-galaxy", "~> 0.3.4"
+gem "taverna-t2flow", "~> 0.4.0"
+gem "workflow-to-galaxy", "~> 0.3.5"
+gem "rdf", "~> 0.3.4.1"
+gem "rdf-raptor", "~> 0.4.1"
+gem "rdf-n3"
+gem "recaptcha", "~> 0.3.4"
+gem "encrypted_strings", "~> 0.3.3"
+gem "encrypted_attributes", "~> 0.4.1"
+gem "sunspot_rails", "~> 2.0.0"
+gem "sunspot_solr", "~> 2.0.0"
+gem "will_paginate", "~> 2.3.16"
+gem "open_id_authentication", "~> 1.1.0"
Modified: branches/events/Rakefile (3490 => 3491)
--- branches/events/Rakefile 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/Rakefile 2013-04-03 15:44:21 UTC (rev 3491)
@@ -5,19 +5,19 @@
require 'rake'
require 'rake/testtask'
-require 'rake/rdoctask'
+require 'rdoc/task'
require 'tasks/rails'
desc 'Rebuild Solr index'
task "myexp:refresh:solr" do
require File.dirname(__FILE__) + '/config/environment'
- Workflow.rebuild_solr_index
- Blob.rebuild_solr_index
- User.rebuild_solr_index
- Network.rebuild_solr_index
- Pack.rebuild_solr_index
- Service.rebuild_solr_index
+ Workflow.solr_reindex
+ Blob.solr_reindex
+ User.solr_reindex
+ Network.solr_reindex
+ Pack.solr_reindex
+ Service.solr_reindex
end
desc 'Refresh contribution caches'
Modified: branches/events/app/controllers/api_controller.rb (3490 => 3491)
--- branches/events/app/controllers/api_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/api_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -4,7 +4,7 @@
# See license.txt for details.
require 'base64'
-require 'lib/rest'
+require 'rest'
class ApiController < ApplicationController
Modified: branches/events/app/controllers/application_controller.rb (3490 => 3491)
--- branches/events/app/controllers/application_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/application_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -6,7 +6,10 @@
# Filters added to this controller apply to all controllers in the application.
# Likewise, all the methods added will be available for all controllers.
+require 'pivoting'
+
class ApplicationController < ActionController::Base
+
helper :all # include all helpers, all the time
protect_from_forgery # See ActionController::RequestForgeryProtection for details
@@ -25,6 +28,8 @@
before_filter :check_external_site_request
include ActionView::Helpers::NumberHelper
+
+ layout :configure_layout
def check_for_sleeper
if request.method != :get && logged_in?
@@ -183,19 +188,28 @@
# this method will return an error message is something goes wrong (empty string in case of success)
error_msg = ""
-
# BEGIN validation and initialisation
-
+
+ # If a group policy was selected, use that, and delete the old custom one (if there was one).
+ if params[:policy_type] == "group"
+ if contributable.contribution.policy && !contributable.contribution.policy.group_policy?
+ contributable.contribution.policy.destroy
+ end
+ contributable.contribution.policy_id = params[:group_policy]
+ contributable.contribution.save
+ return
+ end
+
# This variable will hold current settings of the policy in case something
# goes wrong and a revert would be needed at some point
last_saved_policy = nil
return if params[:sharing].nil? or params[:sharing][:class_id].blank?
-
+
sharing_class = params[:sharing][:class_id]
updating_class = (params[:updating] and !params[:updating][:class_id].blank?) ? params[:updating][:class_id] : "6"
-
+
# Check allowed sharing_class values
return unless [ "0", "1", "2", "3", "4", "7" ].include? sharing_class
@@ -211,9 +225,9 @@
# BEGIN initialisation and validation
- unless contributable.contribution.policy
+ if contributable.contribution.policy.nil? || contributable.contribution.policy.group_policy?
last_saved_policy = Policy._default(current_user, nil) # second parameter ensures that this policy is not applied anywhere
-
+
policy = Policy.new(:name => 'auto',
:contributor_type => 'User', :contributor_id => current_user.id,
:share_mode => sharing_class,
@@ -256,10 +270,25 @@
policy.delete_all_user_permissions
end
-
+
# Process explicit Group permissions now
+ process_permissions(policy, params)
+
+ logger.debug("------ Workflow create summary ------------------------------------")
+ logger.debug("current_user = #{current_user.id}")
+ logger.debug("updating_class = #{updating_class}")
+ logger.debug("sharing_class = #{sharing_class}")
+ logger.debug("policy = #{policy}")
+ logger.debug("group_sharing = #{params[:group_sharing]}")
+ logger.debug("-------------------------------------------------------------------")
+
+ # returns some message in case of errors (or empty string in case of success)
+ return error_msg
+ end
+
+ def process_permissions(policy, params)
if params[:group_sharing]
-
+
# First delete any Permission objects that don't have a checked entry in the form
policy.permissions.each do |p|
params[:group_sharing].each do |n|
@@ -271,17 +300,17 @@
end
end
end
-
+
# Now create or update Permissions
params[:group_sharing].each do |n|
-
+
# Note: n[1] is used because n is an array and n[1] returns it's value (which in turn is a hash)
# In this hash, is a value with key 'id' is present then the checkbox for that group was checked.
if n[1][:id]
-
+
n_id = n[1][:id].to_i
level = n[1][:level]
-
+
unless (perm = Permission.find(:first, :conditions => ["policy_id = ? AND contributor_type = ? AND contributor_id = ?", policy.id, 'Network', n_id]))
# Only create new Permission if it doesn't already exist
p = Permission.new(:policy => policy, :contributor => (Network.find(n_id)))
@@ -290,31 +319,20 @@
# Update the 'level' on the existing permission
perm.set_level!(level) if level
end
-
+
else
-
+
n_id = n[0].to_i
-
+
# Delete permission if it exists (because this one is unchecked)
if (perm = Permission.find(:first, :conditions => ["policy_id = ? AND contributor_type = ? AND contributor_id = ?", policy.id, 'Network', n_id]))
perm.destroy
end
-
+
end
-
+
end
end
-
- logger.debug("------ Workflow create summary ------------------------------------")
- logger.debug("current_user = #{current_user.id}")
- logger.debug("updating_class = #{updating_class}")
- logger.debug("sharing_class = #{sharing_class}")
- logger.debug("policy = #{policy}")
- logger.debug("group_sharing = #{params[:group_sharing]}")
- logger.debug("-------------------------------------------------------------------")
-
- # returns some message in case of errors (or empty string in case of success)
- return error_msg
end
def update_credits(creditable, params)
@@ -415,601 +433,22 @@
send_file(file_name, *opts)
end
- # Pivot code
-
- def calculate_pivot(opts = {})
-
- begin
- expr = parse_filter_expression(opts[:params]["filter"], opts[:pivot_options], :active_filters => opts[:active_filters])
- rescue Exception => ex
- problem = "Problem with query _expression_: #{ex}"
- end
-
- pivot = contributions_list(opts[:params], opts[:user], opts[:pivot_options],
- :model => opts[:model],
- :auth_type => opts[:auth_type],
- :auth_id => opts[:auth_id],
- :group_by => opts[:group_by],
- :active_filters => opts[:active_filters],
- :lock_filter => opts[:locked_filters],
- :search_models => opts[:search_models],
- :search_limit => opts[:search_limit],
- :filters => expr)
-
- [pivot, problem]
- end
-
- TOKEN_UNKNOWN = 0x0000
- TOKEN_AND = 0x0001
- TOKEN_OR = 0x0002
- TOKEN_WORD = 0x0003
- TOKEN_OPEN = 0x0004
- TOKEN_CLOSE = 0x0005
- TOKEN_STRING = 0x0006
- TOKEN_EOS = 0x00ff
-
- NUM_TOKENS = 6
-
- STATE_INITIAL = 0x0000
- STATE_EXPECT_OPEN = 0x0100
- STATE_EXPECT_STR = 0x0200
- STATE_EXPECT_EXPR_END = 0x0300
- STATE_EXPECT_END = 0x0400
- STATE_COMPLETE = 0x0500
-
- def parse_filter_expression(expr, pivot_options, opts = {})
-
- def unescape_string(str)
- str.match(/^"(.*)"$/)[1].gsub(/\\"/, '"')
- end
-
- return nil if expr.nil?
-
- state = STATE_INITIAL
- data = ""
-
- begin
-
- tokens = expr.match(/^
-
- \s* (\sAND\s) | # AND operator
- \s* (\sOR\s) | # OR operator
- \s* (\w+) | # a non-keyword word
- \s* (\() | # an open paranthesis
- \s* (\)) | # a close paranthesis
- \s* ("(\\.|[^\\"])*") # double quoted string with backslash escapes
-
- /ix)
-
- if tokens.nil?
- token = TOKEN_UNKNOWN
- else
- (1..NUM_TOKENS).each do |i|
- token = i if tokens[i]
- end
- end
-
- if token == TOKEN_UNKNOWN
- token = TOKEN_EOS if expr.strip.empty?
- end
-
- case state | token
- when STATE_INITIAL | TOKEN_WORD : state = STATE_EXPECT_OPEN ; data << { :name => tokens[0], :expr => [] }
- when STATE_EXPECT_OPEN | TOKEN_OPEN : state = STATE_EXPECT_STR
- when STATE_EXPECT_STR | TOKEN_STRING : state = STATE_EXPECT_EXPR_END ; data.last[:expr] << tokens[0]
- when STATE_EXPECT_EXPR_END | TOKEN_AND : state = STATE_EXPECT_STR ; data.last[:expr] << :and
- when STATE_EXPECT_EXPR_END | TOKEN_OR : state = STATE_EXPECT_STR ; data.last[:expr] << :or
- when STATE_EXPECT_EXPR_END | TOKEN_CLOSE : state = STATE_EXPECT_END
- when STATE_EXPECT_END | TOKEN_AND : state = STATE_INITIAL ; data << :and
- when STATE_EXPECT_END | TOKEN_OR : state = STATE_INITIAL ; data << :or
- when STATE_EXPECT_END | TOKEN_EOS : state = STATE_COMPLETE
-
- else raise "Error parsing query _expression_"
- end
-
- expr = tokens.post_match unless state == STATE_COMPLETE
-
- end while state != STATE_COMPLETE
-
- # validate and reduce expressions to current capabilities
-
- valid_filters = pivot_options["filters"].map do |f| f["query_option"] end
- valid_filters = valid_filters.select do |f| opts[:active_filters].include?(f) end
-
- data.each do |category|
- case category
- when :or
- raise "Unsupported query _expression_"
- when :and
- # Fine
- else
- raise "Unknown filter category" unless valid_filters.include?(category[:name])
-
- counts = { :and => 0, :or => 0 }
-
- category[:expr].each do |bit|
- counts[bit] = counts[bit] + 1 if bit.class == Symbol
- end
-
- raise "Unsupported query _expression_" if counts[:and] > 0 && counts[:or] > 0
-
- # haven't implemented 'and' within a particular filter yet
- raise "Unsupported query _expression_" if counts[:and] > 0
-
- if category[:expr].length == 1
- category[:expr] = { :terms => [unescape_string(category[:expr].first)] }
- else
- category[:expr] = {
- :operator => category[:expr][1],
- :terms => category[:expr].select do |t|
- t.class == String
- end.map do |t|
- unescape_string(t)
- end
- }
- end
- end
- end
-
- data
- end
-
- def contributions_list(params = nil, user = nil, pivot_options = nil, opts = {})
-
- def escape_sql(str)
- str.gsub(/\\/, '\&\&').gsub(/'/, "''")
- end
-
- def build_url(params, opts, expr, parts, pivot_options, extra = {})
-
- query = {}
-
- if parts.include?(:filter)
- bits = []
- pivot_options["filters"].each do |filter|
- if !opts[:lock_filter] || opts[:lock_filter][filter["query_option"]].nil?
- if find_filter(expr, filter["query_option"])
- bits << filter["query_option"] + "(\"" + find_filter(expr, filter["query_option"])[:expr][:terms].map do |t| t.gsub(/"/, '\"') end.join("\" OR \"") + "\")"
- end
- end
- end
-
- if bits.length > 0
- query["filter"] = bits.join(" AND ")
- end
- end
-
- query["query"] = params[:query] if params[:query]
- query["order"] = params[:order] if parts.include?(:order)
- query["filter_query"] = params[:filter_query] if parts.include?(:filter_query)
-
- query.merge!(extra)
-
- query
- end
-
- def comparison(lhs, rhs)
- if rhs.length == 1
- "#{lhs} = '#{escape_sql(rhs.first)}'"
- else
- "#{lhs} IN ('#{rhs.map do |bit| escape_sql(bit) end.join("', '")}')"
- end
- end
-
- def create_search_results_table(search_query, opts)
-
- begin
- solr_results = opts[:search_models].first.multi_solr_search(search_query,
- :models => opts[:search_models],
- :limit => opts[:search_limit],
- :results_format => :ids)
- rescue
- return false
- end
-
- conn = ActiveRecord::Base.connection
-
- conn.execute("CREATE TEMPORARY TABLE search_results (id INT AUTO_INCREMENT UNIQUE KEY, result_type VARCHAR(255), result_id INT)")
-
- # This next part converts the search results to SQL values
- #
- # from: { "id" => "Workflow:4" }, { "id" => "Pack:6" }, ...
- # to: "(NULL, 'Workflow', '4'), (NULL, 'Pack', '6'), ..."
-
- if solr_results.results.length > 0
- insert_part = solr_results.results.map do |result|
- "(NULL, " + result["id"].split(":").map do |bit|
- "'#{bit}'"
- end.join(", ") + ")"
- end.join(", ")
-
- conn.execute("INSERT INTO search_results VALUES #{insert_part}")
- end
-
- true
- end
-
- def drop_search_results_table
- ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS search_results")
- end
-
- def column(column, opts)
- if column == :auth_type
- opts[:auth_type]
- else
- column
- end
- end
-
- def calculate_filter(collection, params, filter, pivot_options, user, opts = {})
-
- # apply all the joins and conditions except for the current filter
-
- joins = []
- conditions = []
-
- pivot_options["filters"].each do |other_filter|
- if filter_list = find_filter(opts[:filters], other_filter["query_option"])
- unless opts[:inhibit_other_conditions]
- conditions << comparison(column(other_filter["id_column"], opts), filter_list[:expr][:terms]) unless other_filter == filter
- end
- joins += other_filter["joins"] if other_filter["joins"]
- end
- end
-
- filter_id_column = column(filter["id_column"], opts)
- filter_label_column = column(filter["label_column"], opts)
-
- joins += filter["joins"] if filter["joins"]
- conditions << "#{filter_id_column} IS NOT NULL" if filter["not_null"]
-
- unless opts[:inhibit_filter_query]
- if params[:filter_query]
- conditions << "(#{filter_label_column} LIKE '%#{escape_sql(params[:filter_query])}%')"
- end
- end
-
- current = find_filter(opts[:filters], filter["query_option"]) ? find_filter(opts[:filters], filter["query_option"])[:expr][:terms] : []
-
- if opts[:ids].nil?
- limit = 10
- else
- conditions << "(#{filter_id_column} IN ('#{opts[:ids].map do |id| escape_sql(id) end.join("','")}'))"
- limit = nil
- end
-
- conditions = conditions.length.zero? ? nil : conditions.join(" AND ")
-
- count_expr = "COUNT(DISTINCT #{opts[:auth_type]}, #{opts[:auth_id]})"
-
- objects = collection.find(
- :all,
- :select => "#{filter_id_column} AS filter_id, #{filter_label_column} AS filter_label, #{count_expr} AS filter_count",
- :joins => merge_joins(joins, pivot_options, :auth_type => opts[:auth_type], :auth_id => opts[:auth_id]),
- :conditions => conditions,
- :group => "#{filter_id_column}",
- :limit => limit,
- :order => "#{count_expr} DESC, #{filter_label_column}")
-
- objects = objects.select do |x| !x[:filter_id].nil? end
-
- objects = objects.map do |object|
-
- value = object.filter_id.to_s
- selected = current.include?(value)
-
- label_expr = deep_clone(opts[:filters])
- label_expr -= [find_filter(label_expr, filter["query_option"])] if find_filter(label_expr, filter["query_option"])
-
- unless selected && current.length == 1
- label_expr << { :name => filter["query_option"], :expr => { :terms => [value] } }
- end
-
- checkbox_expr = deep_clone(opts[:filters])
-
- if expr_filter = find_filter(checkbox_expr, filter["query_option"])
-
- if selected
- expr_filter[:expr][:terms] -= [value]
- else
- expr_filter[:expr][:terms] += [value]
- end
-
- checkbox_expr -= [expr_filter] if expr_filter[:expr][:terms].empty?
-
- else
- checkbox_expr << { :name => filter["query_option"], :expr => { :terms => [value] } }
- end
-
- label_uri = build_url(params, opts, label_expr, [:filter, :order], pivot_options, "page" => nil)
-
- checkbox_uri = build_url(params, opts, checkbox_expr, [:filter, :order], pivot_options, "page" => nil)
-
- label = object.filter_label.clone
- label = visible_name(label) if filter["visible_name"]
- label = label.capitalize if filter["capitalize"]
-
- plain_label = object.filter_label
-
- if params[:filter_query]
- label.sub!(Regexp.new("(#{params[:filter_query]})", Regexp::IGNORECASE), '<b>\1</b>')
- end
-
- {
- :object => object,
- :value => value,
- :label => label,
- :plain_label => plain_label,
- :count => object.filter_count,
- :checkbox_uri => checkbox_uri,
- :label_uri => label_uri,
- :selected => selected
- }
- end
-
- [current, objects]
- end
-
- def calculate_filters(collection, params, opts, pivot_options, user)
-
- # produce the filter list
-
- filters = deep_clone(pivot_options["filters"])
- cancel_filter_query_url = nil
-
- filters.each do |filter|
-
- # calculate the top n items of the list
-
- filter[:current], filter[:objects] = calculate_filter(collection, params, filter, pivot_options, user, opts)
-
- # calculate which active filters are missing (because they weren't in the
- # top part of the list or have a count of zero)
-
- missing_filter_ids = filter[:current] - filter[:objects].map do |ob| ob[:value] end
-
- if missing_filter_ids.length > 0
- filter[:objects] += calculate_filter(collection, params, filter, pivot_options, user, opts.merge(:ids => missing_filter_ids))[1]
- end
-
- # calculate which active filters are still missing (because they have a
- # count of zero)
-
- missing_filter_ids = filter[:current] - filter[:objects].map do |ob| ob[:value] end
-
- if missing_filter_ids.length > 0
- zero_list = calculate_filter(collection, params, filter, pivot_options, user, opts.merge(:ids => missing_filter_ids, :inhibit_other_conditions => true))[1]
-
- zero_list.each do |x| x[:count] = 0 end
-
- zero_list.sort! do |a, b| a[:label] <=> b[:label] end
-
- filter[:objects] += zero_list
- end
- end
-
- [filters, cancel_filter_query_url]
- end
-
- def find_filter(filters, name)
- filters.find do |f|
- f[:name] == name
- end
- end
-
- def merge_joins(joins, pivot_options, opts = {})
- if joins.length.zero?
- nil
- else
- joins.uniq.map do |j|
- text = pivot_options["joins"][j].clone
- text.gsub!(/RESULT_TYPE/, opts[:auth_type])
- text.gsub!(/RESULT_ID/, opts[:auth_id])
- text
- end.join(" ")
- end
- end
-
- pivot_options["filters"] = pivot_options["filters"].select do |f|
- opts[:active_filters].include?(f["query_option"])
- end
-
- joins = []
- conditions = []
-
- # parse the filter _expression_ if provided. convert filter _expression_ to
- # the old format. this will need to be replaced eventually
-
- opts[:filters] ||= []
-
- include_reset_url = opts[:filters].length > 0
-
- # filter out top level logic operators for now
-
- opts[:filters] = opts[:filters].select do |bit|
- bit.class == Hash
- end
-
- # apply locked filters
-
- if opts[:lock_filter]
- opts[:lock_filter].each do |filter, value|
- opts[:filters] << { :name => filter, :expr => { :terms => [value] } }
- end
- end
-
- # perform search if requested
-
- query_problem = false
-
- if params["query"]
- drop_search_results_table
- if !create_search_results_table(params["query"], opts)
- params["query"] = nil
- query_problem = true
- end
- end
-
- if params[:query]
- klass = SearchResult
- auth_type = "search_results.result_type"
- auth_id = "search_results.result_id"
- group_by = "search_results.result_type, search_results.result_id"
- else
- klass = opts[:model] || Contribution
- auth_type = opts[:auth_type] || "contributions.contributable_type"
- auth_id = opts[:auth_id] || "contributions.contributable_id"
- group_by = opts[:group_by] || "contributions.contributable_type, contributions.contributable_id"
- end
-
- # determine joins, conditions and order for the main results
-
- pivot_options["filters"].each do |filter|
- if filter_list = find_filter(opts[:filters], filter["query_option"])
- conditions << comparison(column(filter["id_column"], opts.merge( { :auth_type => auth_type, :auth_id => auth_id } )), filter_list[:expr][:terms])
- joins += filter["joins"] if filter["joins"]
- end
- end
-
- order_options = pivot_options["order"].find do |x|
- x["option"] == params[:order]
- end
-
- order_options ||= pivot_options["order"].first
-
- joins += order_options["joins"] if order_options["joins"]
-
- having_bits = []
-
-# pivot_options["filters"].each do |filter|
-# if params["and_#{filter["query_option"]}"]
-# having_bits << "GROUP_CONCAT(DISTINCT #{filter["id_column"]} ORDER BY #{filter["id_column"]}) = \"#{escape_sql(opts[:filters][filter["query_option"]])}\""
-# end
-# end
-
- having_clause = ""
-
- if having_bits.length > 0
- having_clause = "HAVING #{having_bits.join(' AND ')}"
- end
-
- # perform the results query
-
- collection = Authorization.scoped(klass,
- :authorised_user => user,
- :include_permissions => true,
- :auth_type => auth_type,
- :auth_id => auth_id)
-
- results = collection.find(
- :all,
- :page => { :size => params["num"] ? params["num"].to_i : nil, :current => params["page"] },
- :joins => merge_joins(joins, pivot_options, :auth_type => auth_type, :auth_id => auth_id),
- :conditions => conditions.length.zero? ? nil : conditions.join(" AND "),
- :group => "#{group_by} #{having_clause}",
- :order => order_options["order"])
-
- # produce a query hash to match the current filters
-
- opts[:filter_params] = {}
-
- pivot_options["filters"].each do |filter|
- if params[filter["query_option"]]
- next if opts[:lock_filter] && opts[:lock_filter][filter["query_option"]]
- opts[:filter_params][filter["query_option"]] = params[filter["query_option"]]
- end
- end
-
- # produce the filter list
-
- opts_for_filter_query = opts.merge( { :auth_type => auth_type,
- :auth_id => auth_id, :group_by => group_by } )
-
- filters, cancel_filter_query_url = calculate_filters(collection, params, opts_for_filter_query, pivot_options, user)
-
- # produce the summary. If a filter query is specified, then we need to
- # recalculate the filters without the query to get all of them.
-
- if params[:filter_query]
- filters2 = calculate_filters(collection, params, opts_for_filter_query.merge( { :inhibit_filter_query => true } ), pivot_options, user)[0]
- else
- filters2 = filters
- end
-
- summary = ""
-
- filters2.select do |filter|
-
- next if opts[:lock_filter] && opts[:lock_filter][filter["query_option"]]
-
- selected = filter[:objects].select do |x| x[:selected] end
- current = selected.map do |x| x[:value] end
-
- if selected.length > 0
- selected_labels = selected.map do |x|
-
- expr = deep_clone(opts[:filters])
-
- f = find_filter(expr, filter["query_option"])
-
- expr -= f[:expr][:terms] -= [x[:value]]
- expr -= [f] if f[:expr][:terms].empty?
-
- x[:plain_label] + ' <a href="" + url_for(build_url(params, opts, expr,
- [:filter, :filter_query, :order], pivot_options)) +
- '">' + " <img src='' /></a>"
-
- end
-
- bits = selected_labels.map do |label| label end.join(" <i>or</i> ")
-
- summary << '<span class="filter-in-use"><b>' + filter["title"].capitalize + "</b>: " + bits + "</span> "
- end
- end
-
- if params[:filter_query]
- cancel_filter_query_url = build_url(params, opts, opts[:filters], [:filter, :order], pivot_options)
- end
-
- if include_reset_url
- reset_filters_url = build_url(params, opts, opts[:filters], [:order], pivot_options)
- end
-
- # remove filters that do not help in narrowing down the result set
-
- filters = filters.select do |filter|
- if filter[:objects].empty?
- false
- elsif opts[:lock_filter] && opts[:lock_filter][filter["query_option"]]
- false
- else
- true
- end
- end
-
- {
- :results => results,
- :filters => filters,
- :reset_filters_url => reset_filters_url,
- :cancel_filter_query_url => cancel_filter_query_url,
- :filter_query_url => build_url(params, opts, opts[:filters], [:filter], pivot_options),
- :summary => summary,
- :pivot_options => pivot_options,
- :query_problem => query_problem
- }
- end
-
#Applies the layout for the Network with the given network_id to the object (contributable)
def update_layout(object,network_id)
- if network_id.blank?
- object.contribution.layout = nil
- object.contribution.save
+ if object.is_a?(Policy)
+ policy = object
else
+ policy = object.contribution.policy
+ end
+ if network_id.blank? || network_id == "Default"
+ policy.layout = nil
+ policy.save
+ else
network = Network.find(network_id.to_i)
# Have to call .reload on permissions or the cached permissions from before "update_policy" was called are used
- if network && find_permission_for_contributor(object.contribution.policy.permissions.reload, "Network", network_id.to_i)
- object.contribution.layout = network.layout_name
- object.contribution.save
+ if network && find_permission_for_contributor(policy.permissions.reload, "Network", network_id.to_i)
+ policy.layout = network.layout_name
+ policy.save
else
object.errors.add_to_base("You may only choose layouts for groups that this #{object.class.name.downcase} is shared with.")
end
@@ -1051,4 +490,96 @@
format.html { redirect_to target, (referrer.blank? ? nil : params) }
end
end
+
+ # Intercept 404/500 etc. errors and display a custom page
+ def render_optional_error_file(status_code)
+ if status_code == :unauthorized
+ render_401
+ elsif status_code == :not_found
+ render_404
+ elsif status_code == :internal_server_error
+ render_500
+ else
+ super
+ end
+ end
+
+ def render_401(message = nil)
+ @message = message
+ respond_to do |format|
+ format.html { render :template => "errors/401", :status => 401 }
+ format.xml do
+ headers["WWW-Authenticate"] = %(Basic realm="Web Password")
+ render :nothing => true, :status => 401
+ end
+ format.all { render :nothing => true, :status => 401 }
+ end
+ end
+
+ def render_404(message = nil)
+ @message = message
+ respond_to do |format|
+ format.html { render :template => "errors/404", :status => 404 }
+ format.all { render :nothing => true, :status => 404 }
+ end
+ end
+
+ def render_500(message = nil)
+ @message = message
+ respond_to do |format|
+ format.html { render :template => "errors/500", :status => 500 }
+ format.all { render :nothing => true, :status => 500 }
+ end
+ end
+
+ def check_context
+ if params[:user_id]
+ @context = User.find_by_id(params[:user_id])
+ error("User not found") if @context.nil?
+ elsif params[:network_id]
+ @context = Network.find_by_id(params[:network_id])
+ error("Group not found") if @context.nil?
+ end
+ end
+
+ # Selects layout (aka skin) for contributables/groups or uses site's default.
+ # Sets a variable that is used for choosing the right stylesheets etc., then returns the layout name for rails
+ # to render the view with.
+ def configure_layout
+ contributable = (@workflow || @pack || @blob)
+ layout = nil
+
+ # For testing skins
+ if params["layout_preview"]
+ layout = Conf.layouts[params["layout_preview"]]
+ # Skins on resources
+ elsif contributable && contributable.contribution && contributable.contribution.policy
+ if contributable.contribution.policy.layout
+ layout = Conf.layouts[contributable.contribution.policy.layout]
+ if layout.nil?
+ logger.error("Missing layout for #{contributable.class.name} #{contributable.id}: "+
+ "#{contributable.contribution.policy.layout}")
+ end
+ end
+ # Skins on groups, or when in a group context
+ elsif (network = @network) || (@context.is_a?(Network) && (network = @context))
+ layout = network.layout
+ end
+
+ # Check skin exists
+ if layout && layout["layout"] && !File.exists?("#{RAILS_ROOT}/app/views/layouts/#{layout["layout"]}.html.erb")
+ logger.error("Missing layout #{RAILS_ROOT}/app/views/layouts/#{layout["layout"]}.html.erb")
+ layout = nil
+ end
+
+ # Use default skin if all else fails
+ if layout.nil?
+ @layout = {"layout" => 'application', "stylesheets" => [Conf.stylesheet]}
+ else
+ @layout = layout
+ end
+
+ @layout["layout"]
+ end
+
end
Modified: branches/events/app/controllers/blobs_controller.rb (3490 => 3491)
--- branches/events/app/controllers/blobs_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/blobs_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -15,6 +15,8 @@
before_filter :set_sharing_mode_variables, : [:show, :new, :create, :edit, :update]
before_filter :check_is_owner, : [:edit, :update, :suggestions, :process_suggestions]
+
+ before_filter :check_context, : :index
# declare sweepers and which actions should invoke them
cache_sweeper :blob_sweeper, : [ :create, :update, :destroy ]
@@ -38,7 +40,7 @@
send_data(@version.content_blob.data, :filename => @version.local_name, :type => @version.content_type.mime_type)
- #send_file("#{RAILS_ROOT}/#{controller_name}/address@hidden/address@hidden/address@hidden", :filename => @blob.local_name, :type => @blob.content_type.mime_type)
+ #send_file("#{Rails.root}/#{controller_name}/address@hidden/address@hidden/address@hidden", :filename => @blob.local_name, :type => @blob.content_type.mime_type)
end
# GET /files/:id/download/:name
@@ -68,6 +70,20 @@
respond_to do |format|
format.html {
+ @query = params[:query]
+ @query_type = 'files'
+ pivot_options = Conf.pivot_options.dup
+ unless @query.blank?
+ pivot_options["order"] = [{"order" => "id ASC", "option" => "relevance", "label" => "Relevance"}] + pivot_options["order"]
+ end
+
+ locked_filters = { 'CATEGORY' => 'Blob' }
+
+ if @context
+ context_filter = visible_name(@context).upcase + "_ID"
+ locked_filters[context_filter] = @context.id.to_s
+ end
+
@pivot, problem = calculate_pivot(
:pivot_options => Conf.pivot_options,
@@ -76,7 +92,7 @@
:search_models => [Blob],
:search_limit => Conf.max_search_size,
- :locked_filters => { 'CATEGORY' => 'Blob' },
+ :locked_filters => locked_filters,
:active_filters => ["CATEGORY", "TYPE_ID", "TAG_ID", "USER_ID",
"LICENSE_ID", "GROUP_ID", "WSDL_ENDPOINT",
@@ -85,9 +101,6 @@
flash.now[:error] = problem if problem
- @query = params[:query]
- @query_type = 'files'
-
# index.rhtml
}
end
@@ -148,7 +161,10 @@
@blob = Blob.new(params[:blob])
@blob.content_blob = ContentBlob.new(:data ="" data)
- @blob.content_type = ContentType.find_or_create_by_mime_type(:user => current_user, :mime_type => content_type, :category=> 'Blob')
+ @blob.content_type = ContentType.find_or_create_by_mime_type(:user => current_user,
+ :title => content_type,
+ :mime_type => content_type,
+ :category=> 'Blob')
respond_to do |format|
if @blob.save
@@ -162,13 +178,12 @@
@blob.contribution.update_attributes(params[:contribution])
policy_err_msg = update_policy(@blob, params)
- update_layout(@blob, params[:layout])
-
+
update_credits(@blob, params)
update_attributions(@blob, params, current_user)
if policy_err_msg.blank?
-
+ update_layout(@blob, params[:layout]) unless params[:policy_type] == "group"
@version = @blob.find_version(1)
format.html {
@@ -212,7 +227,10 @@
if params[:blob][:data] && params[:blob][:data].size > 0
@blob.build_content_blob(:data ="" params[:blob][:data].read)
@blob.local_name = params[:blob][:data].original_filename
- @blob.content_type = ContentType.find_or_create_by_mime_type(:user => current_user, :title => params[:blob][:data].content_type, :mime_type => params[:blob][:data].content_type, :category => 'Blob')
+ @blob.content_type = ContentType.find_or_create_by_mime_type(:user => current_user,
+ :title => params[:blob][:data].content_type,
+ :mime_type => params[:blob][:data].content_type,
+ :category => 'Blob')
end
params[:blob].delete(:data)
@@ -231,9 +249,10 @@
policy_err_msg = update_policy(@blob, params)
update_credits(@blob, params)
update_attributions(@blob, params, current_user)
- update_layout(@blob, params[:layout])
-
+
if policy_err_msg.blank?
+ update_layout(@blob, params[:layout]) unless params[:policy_type] == "group"
+
format.html {
if @blob.new_version_number
@@ -299,7 +318,7 @@
@blob.tags_user_id = current_user # acts_as_taggable_redux
@blob.tag_list = "address@hidden, #{convert_tags_to_gem_format params[:tag_list]}" if params[:tag_list]
@blob.update_tags # hack to get around acts_as_versioned
- @blob.solr_save if Conf.solr_enable
+ @blob.solr_index if Conf.solr_enable
respond_to do |format|
format.html {
@@ -441,13 +460,13 @@
else
if logged_in?
- error("File not found (id not authorized)", "is invalid (not authorized)")
+ render_401("You are not authorized to access this file.")
else
find_blob_auth if login_required
end
end
rescue ActiveRecord::RecordNotFound
- error("File not found", "is invalid")
+ render_404("File not found.")
end
end
@@ -475,7 +494,7 @@
def check_is_owner
if @blob
- error("You are not authorised to manage this File", "") unless @blob.owner?(current_user)
+ render_401("You are not authorised to manage this file.") unless @blob.owner?(current_user)
end
end
Deleted: branches/events/app/controllers/blog_posts_controller.rb (3490 => 3491)
--- branches/events/app/controllers/blog_posts_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/blog_posts_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,139 +0,0 @@
-# myExperiment: app/controllers/blog_posts_controller.rb
-#
-# Copyright (c) 2007 University of Manchester and the University of Southampton.
-# See license.txt for details.
-
-class BlogPostsController < ApplicationController
- before_filter :login_required
-
- before_filter :find_blog_and_blog_posts, : [:index]
- before_filter :find_blog_and_blog_post, : [:show, :edit, :update, :destroy]
- before_filter :find_blog_auth, : [:new]
-
- # GET /blog_posts
- def index
- respond_to do |format|
- format.html # index.rhtml
- end
- end
-
- # GET /blog_posts/1
- def show
- respond_to do |format|
- format.html # show.rhtml
- end
- end
-
- # GET /blog_posts/new
- def new
- @blog_post = BlogPost.new(:blog => @blog)
- end
-
- # GET /blog_posts/1;edit
- def edit
-
- end
-
- # POST /blog_posts
- def create
-
- return error('Creating new blog content is disabled', 'is disabled')
-
- @blog_post = BlogPost.new(params[:blog_post])
-
- respond_to do |format|
- if @blog_post.save
- flash[:notice] = 'BlogPost was successfully created.'
- format.html { redirect_to blog_url(@blog_post.blog) }
- else
- format.html { render :action ="" "new" }
- end
- end
- end
-
- # PUT /blog_posts/1
- def update
- respond_to do |format|
- if @blog_post.update_attributes(params[:blog_post])
- flash[:notice] = 'BlogPost was successfully updated.'
- format.html { redirect_to blog_url(@blog_post.blog) }
- else
- format.html { render :action ="" "edit" }
- end
- end
- end
-
- # DELETE /blog_posts/1
- def destroy
- @blog_post.destroy
-
- respond_to do |format|
- format.html { redirect_to blog_url(@blog_post.blog) }
- end
- end
-
-protected
-
- def find_blog_auth
-
- action_permissions = {
- "create" => "create",
- "destroy" => "destroy",
- "edit" => "edit",
- "index" => "view",
- "new" => "create",
- "show" => "view",
- "update" => "edit"
- }
-
- begin
- blog = Blog.find(params[:blog_id])
-
- if Authorization.check(action_permissions[action_name], blog, current_user)
- @blog = blog
- else
- error("Blog not found (id not authorized)", "is invalid (not authorized)")
- end
- rescue ActiveRecord::RecordNotFound
- error("Blog not found", "is invalid")
- end
- end
-
- def find_blog_posts
- options = { :order => "created_at DESC" }
- options = options.merge({ :conditions => ["blog_id = ?", @blog.id] }) if @blog
-
- @blog_posts = BlogPost.find(:all, options)
- end
-
- def find_blog_post
- begin
- @blog_post = BlogPost.find(params[:id], :conditions => ["blog_id = ?", @blog.id])
- rescue ActiveRecord::RecordNotFound
- error("Blog Post not found", "is invalid")
- end
- end
-
- def find_blog_and_blog_posts
- find_blog_auth
-
- find_blog_posts if @blog
- end
-
- def find_blog_and_blog_post
- find_blog_auth
-
- find_blog_post if @blog
- end
-
-private
-
- def error(notice, message, attr=:id)
- flash[:error] = notice
- (err = BlogPost.new.errors).add(attr, message)
-
- respond_to do |format|
- format.html { redirect_to blog_blog_posts_url(params[:blog_id]) }
- end
- end
-end
Deleted: branches/events/app/controllers/blogs_controller.rb (3490 => 3491)
--- branches/events/app/controllers/blogs_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/blogs_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,151 +0,0 @@
-# myExperiment: app/controllers/blogs_controller.rb
-#
-# Copyright (c) 2007 University of Manchester and the University of Southampton.
-# See license.txt for details.
-
-class BlogsController < ApplicationController
- before_filter :login_required, :except => [:index, :show]
-
- before_filter :find_blogs, : [:index]
- #before_filter :find_blog_auth, : [:show, :edit, :update, :destroy]
- before_filter :find_blog_auth, :except => [:index, :new, :create, :update, :destroy]
-
- # GET /blogs
- def index
- respond_to do |format|
- format.html # index.rhtml
- end
- end
-
- # GET /blogs/1
- def show
- @viewing = Viewing.create(:contribution => @blog.contribution, :user => (logged_in? ? current_user : nil))
-
- @sharing_mode = @blog.contribution.policy.share_mode
-
- respond_to do |format|
- format.html # show.rhtml
- end
- end
-
- # GET /blogs/new
- def new
- @blog = Blog.new
-
- @sharing_mode = 0
- end
-
- # GET /blogs/1;edit
- def edit
- @sharing_mode = @blog.contribution.policy.share_mode
- end
-
- # POST /blogs
- def create
-
- return error('Creating new blog content is disabled', 'is disabled')
-
- params[:blog][:contributor_type] = "User"
- params[:blog][:contributor_id] = current_user.id
-
- @blog = Blog.new(params[:blog])
-
- respond_to do |format|
- if @blog.save
-
- @blog.contribution.update_attributes(params[:contribution])
-
- update_policy(@blog, params)
-
- flash[:notice] = 'Blog was successfully created.'
- format.html { redirect_to blog_url(@blog) }
- else
- format.html { render :action ="" "new" }
- end
- end
- end
-
- # PUT /blogs/1
- def update
-
- # remove protected columns
- if params[:blog]
- [:contributor_id, :contributor_type, :created_at, :updated_at].each do |column_name|
- params[:blog].delete(column_name)
- end
- end
-
- respond_to do |format|
- if @blog.update_attributes(params[:blog])
-
- # security fix (only allow the owner to change the policy)
- @blog.contribution.update_attributes(params[:contribution]) if @blog.contribution.owner?(current_user)
-
- update_policy(@blog, params)
-
- flash[:notice] = 'Blog was successfully updated.'
- format.html { redirect_to blog_url(@blog) }
- else
- format.html { render :action ="" "edit" }
- end
- end
- end
-
- # DELETE /blogs/1
- def destroy
- @blog.destroy
-
- respond_to do |format|
- format.html { redirect_to blogs_url }
- end
- end
-
-protected
-
- def find_blogs
- @blogs = Blog.find(:all,
- :order => "title ASC, created_at DESC",
- :page => { :size => 20,
- :current => params[:page] })
- end
-
- def find_blog_auth
-
- action_permissions = {
- "create" => "create",
- "destroy" => "destroy",
- "edit" => "edit",
- "index" => "view",
- "new" => "create",
- "show" => "view",
- "update" => "edit",
- }
-
- begin
- blog = Blog.find(params[:id])
-
- if Authorization.check(action_permissions[action_name], blog, current_user)
- @blog = blog
- else
- if logged_in?
- error("Blog not found (id not authorized)", "is invalid (not authorized)")
- else
- find_blog_auth if login_required
- end
- end
- rescue ActiveRecord::RecordNotFound
- error("Blog not found", "is invalid")
- end
- end
-
-private
-
- def error(notice, message, attr=:id)
- flash[:error] = notice
- (err = Blog.new.errors).add(attr, message)
-
- respond_to do |format|
- format.html { redirect_to blogs_url }
- end
- end
-end
Modified: branches/events/app/controllers/bookmarks_controller.rb (3490 => 3491)
--- branches/events/app/controllers/bookmarks_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/bookmarks_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -6,7 +6,6 @@
class BookmarksController < ApplicationController
before_filter :login_required
- before_filter :find_bookmarks_auth, : [:index]
before_filter :find_bookmark_auth, : [:show, :edit, :update, :destroy]
# declare sweepers and which actions should invoke them
@@ -37,14 +36,6 @@
protected
- def find_bookmarks_auth
- @bookmarks = Bookmark.find(:all,
- :conditions => ["user_id = ?", current_user.id],
- :order => "created_at DESC",
- :page => { :size => 20,
- :current => params[:page] })
- end
-
def find_bookmark_auth
begin
@bookmark = Bookmark.find(params[:id], :conditions => ["user_id = ?", current_user.id])
Modified: branches/events/app/controllers/comments_controller.rb (3490 => 3491)
--- branches/events/app/controllers/comments_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/comments_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -39,7 +39,7 @@
if success
Activity.create(:subject => current_user, :action ="" 'create', :objekt => comment, :auth => @context)
- @context.solr_save if @context.respond_to?(:solr_save)
+ @context.solr_index if @context.respond_to?(:solr_index)
end
end
@@ -55,7 +55,7 @@
# DELETE /:context_type/:context_id/comments/:id
def destroy
@comment.destroy
- @context.solr_save if @context.respond_to?(:solr_save)
+ @context.solr_index if @context.respond_to?(:solr_index)
respond_to do |format|
format.html { render :partial => "comments/comments", :locals => { :commentable => @context } }
Modified: branches/events/app/controllers/content_types_controller.rb (3490 => 3491)
--- branches/events/app/controllers/content_types_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/content_types_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -12,8 +12,13 @@
params[:num] = 25 unless params[:num]
- @content_types = ContentType.find(:all, :order => 'title ASC',
- :page => { :size => params[:num], :current => params[:page] })
+ if params[:mime_type]
+ @content_types = ContentType.find_all_by_mime_type(params[:mime_type], :order => 'title ASC')
+ else
+ @content_types = ContentType.find(:all, :order => 'title ASC')
+ end
+
+ @content_types = @content_types.paginate(:page => params[:page], :per_page => params[:num])
end
# GET /content_types/1
Modified: branches/events/app/controllers/feedback_controller.rb (3490 => 3491)
--- branches/events/app/controllers/feedback_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/feedback_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,3 +1,5 @@
+require 'recaptcha'
+
class FeedbackController < ApplicationController
before_filter :only_index, :except => [:index, :create]
Copied: branches/events/app/controllers/group_policies_controller.rb (from rev 3490, trunk/app/controllers/group_policies_controller.rb) (0 => 3491)
--- branches/events/app/controllers/group_policies_controller.rb (rev 0)
+++ branches/events/app/controllers/group_policies_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,120 @@
+# myExperiment: app/controllers/group_policies_controller.rb
+#
+# Copyright (c) 2013 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+class GroupPoliciesController < ApplicationController
+
+ include ApplicationHelper
+
+ before_filter :login_required
+ before_filter :find_group
+ before_filter :find_policy, : [:show, :edit, :update, :destroy]
+ before_filter :check_admin
+
+ def index
+ @policies = Policy.find_all_by_contributor_type_and_contributor_id('Network', @group.id)
+
+ respond_to do |format|
+ format.html
+ end
+ end
+
+ def show
+ respond_to do |format|
+ format.html { render :action ="" "edit" }
+ end
+ end
+
+ def new
+ @policy = Policy.new
+ end
+
+ def edit
+
+ end
+
+ def create
+ @policy = Policy.new(:name => params[:name],
+ :contributor => @group,
+ :share_mode => params[:share_mode],
+ :update_mode => 6
+ )
+
+ respond_to do |format|
+ if @policy.save
+ process_permissions(@policy, params)
+ update_layout(@policy, params[:layout])
+ flash[:notice] = 'Policy was successfully created.'
+ format.html { redirect_to network_policies_path(@group) }
+ else
+ format.html { render :action ="" "new" }
+ end
+ end
+ end
+
+ def update
+ respond_to do |format|
+ if @policy.update_attributes(:name => params[:name], :share_mode => params[:share_mode])
+ process_permissions(@policy, params)
+ update_layout(@policy, params[:layout])
+ flash[:notice] = 'Policy was successfully updated'
+ format.html { redirect_to network_policies_path(@group) }
+ else
+ format.html { render :action ="" "edit" }
+ end
+ end
+ end
+
+ def destroy
+ if @policy.contributions.size == 0
+ @policy.destroy
+
+ respond_to do |format|
+ flash[:notice] = "Policy was successfully deleted"
+ format.html { redirect_to network_policies_path(@group) }
+ end
+ else
+ error("This policy is being used by address@hidden resources and may not be deleted.")
+ end
+ end
+
+
+ protected
+
+ def find_group
+ begin
+ @group = Network.find(params[:network_id])
+ rescue ActiveRecord::RecordNotFound
+ error("Group couldn't be found")
+ end
+ end
+
+ def find_policy
+ begin
+ @policy = Policy.find(params[:id])
+ rescue ActiveRecord::RecordNotFound
+ error("Policy couldn't be found")
+ end
+ end
+
+
+ def check_admin
+ unless @group.administrator?(current_user.id)
+ error("Only group administrators are allowed to manage policies")
+ end
+ end
+
+ private
+
+ def error(message)
+ flash[:error] = message
+ return_to_path = @group.nil? ? networks_path : network_policies_path(@group)
+
+ respond_to do |format|
+ format.html { redirect_to return_to_path }
+ end
+ end
+
+
+end
Modified: branches/events/app/controllers/messages_controller.rb (3490 => 3491)
--- branches/events/app/controllers/messages_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/messages_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -18,10 +18,10 @@
@message_folder = "inbox"
@messages = Message.find(:all,
:conditions => ["`to` = ? AND `deleted_by_recipient` = ?", current_user.id, false],
- :order => produce_sql_ordering_string(params[:sort_by], params[:order]),
- :page => { :size => 20,
- :current => params[:page] })
+ :order => produce_sql_ordering_string(params[:sort_by], params[:order]))
+ @messages = @messages.paginate(:page => params[:page], :per_page => 20)
+
respond_to do |format|
format.html # index.rhtml
end
@@ -33,10 +33,10 @@
@message_folder = "outbox"
@messages = Message.find(:all,
:conditions => ["`from` = ? AND `deleted_by_sender` = ?", current_user.id, false],
- :order => produce_sql_ordering_string(params[:sort_by], params[:order]),
- :page => { :size => 20,
- :current => params[:page] })
+ :order => produce_sql_ordering_string(params[:sort_by], params[:order]))
+ @messages = @messages.paginate(:page => params[:page], :per_page => 20)
+
respond_to do |format|
format.html # sent.rhtml
end
@@ -108,7 +108,7 @@
@message = Message.new(:to => @reply.from,
:reply_id => @reply.id,
:subject => subject,
- :body => @reply.body.split(/\n/).collect {|line| ">> #{line}"}.join) # there has to be a 'ruby-er' way of doing this?
+ :body => ActionController::Base.helpers.strip_tags(@reply.body.gsub(/^/, ">> ")))
else
@message = Message.new
end
Modified: branches/events/app/controllers/networks_controller.rb (3490 => 3491)
--- branches/events/app/controllers/networks_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/networks_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -3,11 +3,16 @@
# Copyright (c) 2007 University of Manchester and the University of Southampton.
# See license.txt for details.
+require 'recaptcha'
+
class NetworksController < ApplicationController
- before_filter :login_required, :except => [:index, :show, :search, :all]
+
+ include ApplicationHelper
+
+ before_filter :login_required, :except => [:index, :show, :content, :search, :all]
before_filter :find_networks, : [:all]
- before_filter :find_network, : [:membership_request, :show, :tag]
+ before_filter :find_network, : [:membership_request, :show, :tag, :content]
before_filter :find_network_auth_admin, : [:invite, :membership_invite, :membership_invite_external]
before_filter :find_network_auth_owner, : [:edit, :update, :destroy]
@@ -250,99 +255,8 @@
# GET /networks/1
def show
-
- @item_sort_options = [
- ["rank", "Rank"],
- ["most_recent", "Most recent"],
- ["title", "Title"],
- ["uploader", "Uploader"],
- ["last_updated", "Last updated"],
- ["rating", "User rating"],
- ["licence", "Licence"],
- ["content_type", "Content Type"]
- ]
-
@shared_items = @network.shared_contributions
- case params[:item_sort]
-
- when "rank"; @shared_items.sort! do |a, b|
- b.rank <=> a.rank
- end
-
- when "title"; @shared_items.sort! do |a, b|
- a.contributable.label <=> b.contributable.label
- end
-
- when "most_recent"; @shared_items.sort! do |a, b|
- b.contributable.created_at <=> a.contributable.created_at
- end
-
- when "uploader"; @shared_items.sort! do |a, b|
- if a.contributor.label == b.contributor.label
- b.rank <=> a.rank
- else
- a.contributor.label <=> b.contributor.label
- end
- end
-
- when "last_updated"; @shared_items.sort! do |a, b|
- b.contributable.updated_at <=> a.contributable.updated_at
- end
-
- when "rating"; @shared_items.sort! do |a, b|
-
- a_rating = a.rating
- b_rating = b.rating
-
- if a_rating == b_rating
- b.rank <=> a.rank
- else
- b.rating <=> a.rating
- end
- end
-
- when "licence"; @shared_items.sort! do |a, b|
-
- a_has_licence = a.contributable.respond_to?('license')
- b_has_licence = b.contributable.respond_to?('license')
-
- if (a_has_licence && b_has_licence)
- if a.contributable.license == b.contributable.license
- b.rank <=> a.rank
- else
- a.contributable.license.title <=> b.contributable.license.title
- end
- elsif (a_has_licence && !b_has_licence)
- -1
- elsif (!a_has_licence && b_has_licence)
- 1
- else
- b.rank <=> a.rank
- end
- end
-
- when "content_type"; @shared_items.sort! do |a, b|
-
- a_has_content_type = a.contributable.respond_to?('content_type')
- b_has_content_type = b.contributable.respond_to?('content_type')
-
- if (a_has_content_type && b_has_content_type)
- if a.contributable.content_type == b.contributable.content_type
- b.rank <=> a.rank
- else
- a.contributable.content_type.title <=> b.contributable.content_type.title
- end
- elsif (a_has_content_type && !b_has_content_type)
- -1
- elsif (!a_has_content_type && b_has_content_type)
- 1
- else
- b.rank <=> a.rank
- end
- end
- end
-
respond_to do |format|
format.html {
@@ -362,6 +276,31 @@
end
end
+ # GET /networks/1/content
+ def content
+ respond_to do |format|
+ format.html do
+
+ @pivot, problem = calculate_pivot(
+
+ :pivot_options => Conf.pivot_options,
+ :params => params,
+ :user => current_user,
+ :search_models => [Workflow, Blob, Pack, Service],
+ :search_limit => Conf.max_search_size,
+
+ :locked_filters => { 'GROUP_ID' => @network.id.to_s },
+
+ :active_filters => ["CATEGORY", "TYPE_ID", "TAG_ID", "USER_ID",
+ "LICENSE_ID", "GROUP_ID", "WSDL_ENDPOINT",
+ "CURATION_EVENT", "SERVICE_PROVIDER",
+ "SERVICE_COUNTRY", "SERVICE_STATUS"])
+
+ flash.now[:error] = problem if problem
+ end
+ end
+ end
+
# GET /networks/new
def new
@network = Network.new(:user_id => current_user.id)
@@ -374,6 +313,9 @@
# POST /networks
def create
+
+ params[:network][:user_id] = current_user.id
+
@network = Network.new(params[:network])
respond_to do |format|
@@ -394,6 +336,9 @@
# PUT /networks/1
def update
+
+ params[:network].delete(:user_id)
+
respond_to do |format|
if @network.update_attributes(params[:network])
Activity.create(:subject => current_user, :action ="" 'edit', :objekt => @network)
@@ -421,7 +366,7 @@
@network.tags_user_id = current_user
@network.tag_list = "address@hidden, #{convert_tags_to_gem_format params[:tag_list]}" if params[:tag_list]
@network.update_tags # hack to get around acts_as_versioned
- @network.solr_save if Conf.solr_enable
+ @network.solr_index if Conf.solr_enable
respond_to do |format|
format.html {
@@ -453,9 +398,7 @@
def find_networks
@networks = Network.find(:all,
:order => "title ASC",
- :page => { :size => 20,
- :current => params[:page] },
- :include => [ :owner ])
+ :include => [ :owner ]).paginate(:page => params[:page], :per_page => 20)
end
def find_network
@@ -471,9 +414,12 @@
def find_network_auth_owner
begin
- @network = Network.find(params[:id], :conditions => ["networks.user_id = ?", current_user.id], :include => [ :owner, :memberships ])
+ @network = Network.find(params[:id], :include => [ :owner, :memberships ])
+ unless @network.owner == current_user || current_user.admin?
+ error("Group not found (id not authorized)", "is invalid (not group administrator)")
+ end
rescue ActiveRecord::RecordNotFound
- error("Group not found (id not authorized)", "is invalid (not group adminsitrator)")
+ error("Group not found (id not authorized)", "is invalid (not group administrator)")
end
end
Modified: branches/events/app/controllers/oauth_controller.rb (3490 => 3491)
--- branches/events/app/controllers/oauth_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/oauth_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -41,38 +41,30 @@
end
@address@hidden
redirect_url=params[:oauth_callback]||@token.client_application.callback_url
- if (@token.client_application.key_type == 'System') || @client_applications.include?(@token.client_application)
- unless @token.invalidated?
- if request.post?
- if params[:authorize]=='1'
- @token.authorize!(current_user)
- if redirect_url
- redirect_to redirect_url+"address@hidden"
- else
- render :action=""
- end
- elsif params[:commit]=="Save Changes"
- @token.invalidate!
- if redirect_url
- redirect_to redirect_url+"?oauth_failure=1"
- else
- render :action=""
- end
+ unless @token.invalidated?
+ if request.post?
+ if params[:authorize]=='1'
+ @token.authorize!(current_user)
+ if redirect_url
+ redirect_to redirect_url+"address@hidden"
+ else
+ render :action=""
end
+ elsif params[:commit]=="Save Changes"
+ @token.invalidate!
+ if redirect_url
+ redirect_to redirect_url+"?oauth_failure=1"
+ else
+ render :action=""
+ end
end
- else
- if redirect_url
- redirect_to redirect_url+"?oauth_failure=1"
- else
- render :action=""
- end
end
else
- if redirect_url
- redirect_to redirect_url+"?oauth_failure=1"
- else
- render :action=""
- end
+ if redirect_url
+ redirect_to redirect_url+"?oauth_failure=1"
+ else
+ render :action=""
+ end
end
end
@@ -87,7 +79,6 @@
def index
@client_applications=current_user.client_applications
- @admin_client_applications=ClientApplication.find(:all, :conditions => ["user_id != ? and creator_id = ?", current_user.id, current_user.id])
@tokens=current_user.tokens.find :all, :conditions=>'oauth_tokens.invalidated_at is null and oauth_tokens.authorized_at is not null'
end
@@ -110,23 +101,20 @@
flash[:notice]="Client Application successfully registered!"
redirect_to :action=""
else
+ @permissions = TABLES['REST'][:data]
+ @address@hidden
+ @permissions_for=params[:key_permissions]
render :action=""
end
end
def show
- if (!(@client_application.user_id == current_user.id or @client_application.creator_id == current_user.id))
- @client_application = nil
- end
@address@hidden
end
def edit
@permissions = TABLES['REST'][:data]
@address@hidden
- if (!(@client_application.user_id == current_user.id or @client_application.creator_id == current_user.id))
- @client_application = nil
- end
@address@hidden
unless @client_application.nil?
@address@hidden
@@ -134,13 +122,11 @@
end
def update
- if (current_user.admin? or @client_application.key_type=="User")
- @client_application.permissions.delete_all
- if params[:key_permissions]
- for key_permission in params[:key_permissions] do
- @key_permission = KeyPermission.new(:client_application_id => @client_application.id, :for ="" key_permission[0])
- @key_permission.save
- end
+ @client_application.permissions.delete_all
+ if params[:key_permissions]
+ for key_permission in params[:key_permissions] do
+ @key_permission = KeyPermission.new(:client_application_id => @client_application.id, :for ="" key_permission[0])
+ @key_permission.save
end
end
if @client_application.update_attributes(params[:client_application])
@@ -168,7 +154,8 @@
"index" => "view",
"request_token" => "view",
"test_request" => "view",
- "show" => "view"
+ "show" => "view",
+ "update" => "edit"
}
if action_name == 'update'
@@ -178,13 +165,13 @@
end
begin
client_app=ClientApplication.find(id)
- if Authorization.check(action_permissions[action_name], client_app, current_user)
+ if Authorization.check(action_permissions[action_name] || action_name, client_app, current_user)
@client_application = client_app
else
- error("Client Application not found (id not authorized)", "is invalid (not authorized)")
+ render_401
end
rescue ActiveRecord::RecordNotFound
- error("Client Application not found", "is invalid")
+ render_404("Client Application not found")
end
end
Modified: branches/events/app/controllers/openid_controller.rb (3490 => 3491)
--- branches/events/app/controllers/openid_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/openid_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -72,7 +72,7 @@
def consumer
# create the OpenID store for storing associations and nonces,
# putting it in your app's db directory
- store_dir = Pathname.new(RAILS_ROOT).join('db').join('openid-store')
+ store_dir = Pathname.new(Rails.root).join('db').join('openid-store')
store = OpenID::Store::Filesystem.new(store_dir)
return OpenID::Consumer.new(session, store)
Modified: branches/events/app/controllers/packs_controller.rb (3490 => 3491)
--- branches/events/app/controllers/packs_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/packs_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -11,7 +11,9 @@
before_filter :find_pack_auth, :except => [:index, :new, :create, :search]
before_filter :set_sharing_mode_variables, : [:show, :new, :create, :edit, :update]
-
+
+ before_filter :check_context, : :index
+
# declare sweepers and which actions should invoke them
cache_sweeper :pack_sweeper, : [ :create, :update, :destroy ]
cache_sweeper :pack_entry_sweeper, : [ :create_item, :quick_add, :update_item, :destroy_item ]
@@ -30,6 +32,20 @@
respond_to do |format|
format.html {
+ @query = params[:query]
+ @query_type = 'packs'
+ pivot_options = Conf.pivot_options.dup
+ unless @query.blank?
+ pivot_options["order"] = [{"order" => "id ASC", "option" => "relevance", "label" => "Relevance"}] + pivot_options["order"]
+ end
+
+ locked_filters = { 'CATEGORY' => 'Pack' }
+
+ if @context
+ context_filter = visible_name(@context).upcase + "_ID"
+ locked_filters[context_filter] = @context.id.to_s
+ end
+
@pivot, problem = calculate_pivot(
:pivot_options => Conf.pivot_options,
@@ -38,7 +54,7 @@
:search_models => [Pack],
:search_limit => Conf.max_search_size,
- :locked_filters => { 'CATEGORY' => 'Pack' },
+ :locked_filters => locked_filters,
:active_filters => ["CATEGORY", "TYPE_ID", "TAG_ID", "USER_ID",
"LICENSE_ID", "GROUP_ID", "WSDL_ENDPOINT",
@@ -47,9 +63,6 @@
flash.now[:error] = problem if problem
- @query = params[:query]
- @query_type = 'packs'
-
# index.rhtml
}
end
@@ -131,9 +144,8 @@
# update policy
policy_err_msg = update_policy(@pack, params)
- update_layout(@pack, params[:layout])
-
if policy_err_msg.blank?
+ update_layout(@pack, params[:layout]) unless params[:policy_type] == "group"
flash[:notice] = 'Pack was successfully created.'
format.html { redirect_to pack_url(@pack) }
else
@@ -160,9 +172,8 @@
if @pack.update_attributes(params[:pack])
@pack.refresh_tags(convert_tags_to_gem_format(params[:pack][:tag_list]), current_user) if params[:pack][:tag_list]
policy_err_msg = update_policy(@pack, params)
- update_layout(@pack, params[:layout])
-
if policy_err_msg.blank?
+ update_layout(@pack, params[:layout]) unless params[:policy_type] == "group"
flash[:notice] = 'Pack was successfully updated.'
format.html { redirect_to pack_url(@pack) }
else
@@ -235,7 +246,7 @@
@pack.tags_user_id = current_user # acts_as_taggable_redux
@pack.tag_list = "address@hidden, #{convert_tags_to_gem_format params[:tag_list]}" if params[:tag_list]
@pack.update_tags # hack to get around acts_as_versioned
- @pack.solr_save if Conf.solr_enable
+ @pack.solr_index if Conf.solr_enable
respond_to do |format|
format.html {
@@ -418,6 +429,24 @@
end
end
+ def snapshot
+
+ success = @pack.snapshot!
+
+ respond_to do |format|
+ format.html {
+ if success
+ @pack.reload
+ flash[:notice] = 'Pack snapshot was successfully created.'
+ redirect_to pack_version_path(@pack, @pack.versions.last.version)
+ else
+ flash[:error] = 'There was a problem with creating the snapshot.'
+ redirect_to pack_path(@pack)
+ end
+ }
+ end
+ end
+
protected
# Check that a protocol is specified in the URI; prepend HTTP:// otherwise
@@ -453,7 +482,8 @@
"statistics" => "view",
"tag" => "view",
"update" => "edit",
- "update_item" => "edit"
+ "update_item" => "edit",
+ "snapshot" => "edit"
}
begin
@@ -462,6 +492,8 @@
if Authorization.check(action_permissions[action_name], pack, current_user)
@pack = pack
+ @version = @pack.find_version(params[:version]) if params[:version]
+
@authorised_to_edit = logged_in? && Authorization.check("edit", @pack, current_user)
@authorised_to_download = Authorization.check("download", @pack, current_user)
@@ -471,10 +503,10 @@
@base_host = base_host
else
- error("You are not authorised to perform this action", "is not authorized")
+ render_401("You are not authorized to access this pack.")
end
rescue ActiveRecord::RecordNotFound
- error("Pack not found", "is invalid")
+ render_404("Pack not found.")
end
end
Copied: branches/events/app/controllers/policies_controller.rb (from rev 3490, trunk/app/controllers/policies_controller.rb) (0 => 3491)
--- branches/events/app/controllers/policies_controller.rb (rev 0)
+++ branches/events/app/controllers/policies_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,17 @@
+# myExperiment: app/controllers/group_policies_controller.rb
+#
+# Copyright (c) 2013 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+class PoliciesController < ApplicationController
+
+ def show
+ @policy = Policy.find(params[:id])
+
+ unless current_user == @policy.contributor ||
+ @policy.contributor_type == 'Network' && @policy.contributor.administrator?(current_user.id)
+ render :code => 401
+ end
+ end
+
+end
Modified: branches/events/app/controllers/profiles_controller.rb (3490 => 3491)
--- branches/events/app/controllers/profiles_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/profiles_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -7,7 +7,6 @@
before_filter :login_required, :except => [:index, :show]
- before_filter :find_profiles, : [:index]
before_filter :find_profile, :except => [:index]
before_filter :auth, :except => [:index, :show]
@@ -101,14 +100,6 @@
protected
- def find_profiles
- @profiles = Profile.find(:all,
- :include => :owner,
- :order => "users.name ASC",
- :page => { :size => 20,
- :current => params[:page] })
- end
-
def find_profile
begin
@user = User.find(params[:user_id])
Modified: branches/events/app/controllers/search_controller.rb (3490 => 3491)
--- branches/events/app/controllers/search_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/search_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -29,7 +29,11 @@
end
if @type == "all"
- search_all
+ if shortcut = Conf.shortcut_keywords[params[:query].downcase]
+ redirect_to(shortcut)
+ else
+ search_all
+ end
else
case params[:type]
when 'workflows'
@@ -150,7 +154,10 @@
begin
query = params["q"].downcase
- results = User.multi_solr_search(query, :models => [Workflow, Blob, User], :limit => 25).results
+ results = Sunspot.search [Workflow, Blob, User] do
+ fulltext query
+ adjust_solr_params { |p| p[:defType] = 'edismax' }
+ end.results
results.each do |result|
case result.class.name
@@ -185,10 +192,12 @@
def search_all
@query = params[:query]
+ pivot_options = Conf.pivot_options.dup
+ pivot_options["order"] = [{"order" => "id ASC", "option" => "relevance", "label" => "Relevance"}] + pivot_options["order"]
@pivot, problem = calculate_pivot(
- :pivot_options => Conf.pivot_options,
+ :pivot_options => pivot_options,
:params => params,
:user => current_user,
:search_models => [Workflow, Blob, Pack, User, Network, Service],
@@ -207,7 +216,7 @@
model_name = params[:type].singularize.camelize
model_name = Conf.model_aliases[model_name] if Conf.model_aliases[model_name]
- model = eval(model_name)
+ model = model_name.constantize
@collection_label = params[:type].singularize
@controller_name = model_name.underscore.pluralize
@@ -217,6 +226,8 @@
@query = params[:query] || ''
@query.strip!
+ query = @query
+
limit = params[:num] ? params[:num] : Conf.default_search_size
limit = 1 if limit < 1
@@ -226,9 +237,15 @@
if Conf.solr_enable && address@hidden
begin
- solr_results = model.find_by_solr(@query.downcase, :offset => offset, :limit => limit)
- @total_count = solr_results.total
- @collection = PaginatedArray.new(solr_results.results,
+
+ search_results = model.search do
+ fulltext query.downcase
+ adjust_solr_params { |p| p[:defType] = 'edismax' }
+ paginate :page => params[:page], :per_page => limit
+ end
+
+ @total_count = search_results.total
+ @collection = PaginatedArray.new(search_results.results,
:offset => offset, :limit => limit, :total => @total_count)
rescue
flash.now[:error] = "There was a problem with your search query."
Modified: branches/events/app/controllers/services_controller.rb (3490 => 3491)
--- branches/events/app/controllers/services_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/services_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -8,19 +8,9 @@
include ApplicationHelper
before_filter :find_service, : [:show]
- before_filter :find_services, : [:all]
# GET /algorithms;search
def search
-# @query = params[:query] || ''
-# @query.strip!
-#
-# @contributables = (Conf.solr_enable && address@hidden) ? Algorithm.find_by_solr(@query, :limit => 100).results : []
-# @total_count = (Conf.solr_enable && address@hidden) ? Algorithm.count_by_solr(@query) : 0
-#
-# respond_to do |format|
-# format.html # search.rhtml
-# end
end
# GET /services
@@ -67,13 +57,6 @@
protected
- def find_services
- @contributables = Service.find(:all,
- :order => "created_at DESC",
- :page => { :size => 20,
- :current => params[:page] })
- end
-
def find_service
begin
service = Service.find(params[:id])
Modified: branches/events/app/controllers/sessions_controller.rb (3490 => 3491)
--- branches/events/app/controllers/sessions_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/sessions_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -4,6 +4,7 @@
# See license.txt for details.
require 'uri'
+require 'open_id_authentication'
require 'openid'
require 'openid/extensions/sreg'
require 'openid/store/filesystem'
@@ -178,7 +179,7 @@
def consumer
# create the OpenID store for storing associations and nonces,
# putting it in your app's db directory
- store_dir = Pathname.new(RAILS_ROOT).join('db').join('openid-store')
+ store_dir = Pathname.new(Rails.root).join('db').join('openid-store')
store = OpenID::Store::Filesystem.new(store_dir)
return OpenID::Consumer.new(session, store)
Modified: branches/events/app/controllers/topics_controller.rb (3490 => 3491)
--- branches/events/app/controllers/topics_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/topics_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,3 @@
-# -*- coding: undecided -*-
# myExperiment: app/controllers/topics_controller.rb
#
# Copyright (c) 2007 University of Manchester and the University of Southampton.
Modified: branches/events/app/controllers/users_controller.rb (3490 => 3491)
--- branches/events/app/controllers/users_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/users_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -4,10 +4,11 @@
# See license.txt for details.
require 'open-uri'
+require 'recaptcha'
class UsersController < ApplicationController
- contributable_actions = [:workflows, :files, :packs, :blogs]
+ contributable_actions = [:workflows, :files, :packs]
show_actions = [:show, :news, :friends, :groups, :credits, :tags, :favourites] + contributable_actions
before_filter :login_required, :except => [:index, :new, :create, :search, :all, :confirm_email, :forgot_password, :reset_password] + show_actions
@@ -90,11 +91,6 @@
render :action ="" 'show'
end
- def blogs
- @tab = "Blogs"
- render :action ="" 'show'
- end
-
def credits
@tab = "Credits"
render :action ="" 'show'
@@ -756,11 +752,11 @@
def find_users
@users = User.find(:all,
:order => "users.name ASC",
- :page => { :size => 20,
- :current => params[:page] },
:conditions => "users.activated_at IS NOT NULL",
:include => :profile)
-
+
+ @users = @users.paginate(:page => params[:page], :per_page => 20)
+
@users.each do |user|
user.salt = nil
user.crypted_password = nil
Modified: branches/events/app/controllers/workflows_controller.rb (3490 => 3491)
--- branches/events/app/controllers/workflows_controller.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/controllers/workflows_controller.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -21,6 +21,8 @@
before_filter :check_is_owner, : [:edit, :update]
+ before_filter :check_context, : :index
+
# declare sweepers and which actions should invoke them
cache_sweeper :workflow_sweeper, : [ :create, :create_version, :launch, :update, :update_version, :destroy_version, :destroy ]
cache_sweeper :download_viewing_sweeper, : [ :show, :download, :named_download, :galaxy_tool, :galaxy_tool_download, :launch ]
@@ -124,7 +126,7 @@
end
@workflow.reload
- @workflow.solr_save if Conf.solr_enable
+ @workflow.solr_index if Conf.solr_enable
end
# GET /workflows/1;download
@@ -216,15 +218,29 @@
respond_to do |format|
format.html do
+ @query = params[:query]
+ @query_type = 'workflows'
+ pivot_options = Conf.pivot_options.dup
+ unless @query.blank?
+ pivot_options["order"] = [{"order" => "id ASC", "option" => "relevance", "label" => "Relevance"}] + pivot_options["order"]
+ end
+
+ locked_filters = { 'CATEGORY' => 'Workflow' }
+
+ if @context
+ context_filter = visible_name(@context).upcase + "_ID"
+ locked_filters[context_filter] = @context.id.to_s
+ end
+
@pivot, problem = calculate_pivot(
- :pivot_options => Conf.pivot_options,
+ :pivot_options => pivot_options,
:params => params,
:user => current_user,
:search_models => [Workflow],
:search_limit => Conf.max_search_size,
- :locked_filters => { 'CATEGORY' => 'Workflow' },
+ :locked_filters => locked_filters,
:active_filters => ["CATEGORY", "TYPE_ID", "TAG_ID", "USER_ID",
"LICENSE_ID", "GROUP_ID", "WSDL_ENDPOINT",
@@ -233,9 +249,6 @@
flash.now[:error] = problem if problem
- @query = params[:query]
- @query_type = 'workflows'
-
end
format.rss do
address@hidden = Workflow.find(:all, :order => "updated_at DESC") # list all (if required)
@@ -357,7 +370,7 @@
if params[:workflow][:tag_list]
@workflow.refresh_tags(convert_tags_to_gem_format(params[:workflow][:tag_list]), current_user)
@workflow.reload
- @workflow.solr_save if Conf.solr_enable
+ @workflow.solr_index if Conf.solr_enable
end
begin
@@ -371,12 +384,11 @@
update_credits(@workflow, params)
update_attributions(@workflow, params, current_user)
- update_layout(@workflow, params[:layout])
-
# Refresh the types handler list of types if a new type was supplied this time.
WorkflowTypesHandler.refresh_all_known_types! if params[:workflow][:type] == 'other'
if policy_err_msg.blank?
+ update_layout(@workflow, params[:layout]) unless params[:policy_type] == "group"
flash[:notice] = 'Workflow was successfully created.'
format.html {
if (@workflow.get_tag_suggestions.length > 0 || (@workflow.body.nil? || @workflow.body == ''))
@@ -482,6 +494,7 @@
begin
@workflow.extract_metadata
rescue
+ raise unless Rails.env == 'production'
end
Activity.create(:subject => current_user, :action ="" 'create', :objekt => @workflow.versions.last, :extra => @workflow.versions.last.version, :auth => @workflow)
@@ -547,16 +560,15 @@
if params[:workflow][:tag_list]
@workflow.refresh_tags(convert_tags_to_gem_format(params[:workflow][:tag_list]), current_user)
@workflow.reload
- @workflow.solr_save if Conf.solr_enable
+ @workflow.solr_index if Conf.solr_enable
end
policy_err_msg = update_policy(@workflow, params)
update_credits(@workflow, params)
update_attributions(@workflow, params, current_user)
- update_layout(@workflow, params[:layout])
-
if policy_err_msg.blank?
+ update_layout(@workflow, params[:layout]) unless params[:policy_type] == "group"
flash[:notice] = 'Workflow was successfully updated.'
format.html { redirect_to workflow_url(@workflow) }
else
@@ -645,7 +657,7 @@
if params[:version]
if @workflow.find_version(params[:version]) == false
- error("Version not found (is invalid)", "not found (is invalid)", :version)
+ render_404("Workflow version not found.")
end
if @workflow.versions.length < 2
error("Can't delete all versions", " is not allowed", :version)
@@ -785,7 +797,7 @@
@viewing_version_number = params[:version].to_i
@viewing_version = viewing
else
- error("Workflow version not found (possibly has been deleted)", "not found (is invalid)", :version)
+ render_404("Workflow version not found.")
end
else
@viewing_version_number = @latest_version_number
@@ -820,12 +832,10 @@
logger.debug("@viewing_version_number = address@hidden")
logger.debug("@workflow.image != nil = address@hidden != nil}")
else
- error("Workflow not found (id not authorized)", "is invalid (not authorized)", nil, 401)
- return false
+ render_401("You are not authorized to access this workflow.")
end
rescue ActiveRecord::RecordNotFound
- error("Workflow not found", "is invalid")
- return false
+ render_404("Workflow not found.")
end
end
@@ -937,7 +947,7 @@
def check_is_owner
if @workflow
- error("You are not authorised to manage this Workflow", "") unless @workflow.owner?(current_user)
+ render_401("You are not authorized to manage this workflow.") unless @workflow.owner?(current_user)
end
end
@@ -965,16 +975,12 @@
end
end
- def error(notice, message, attr=:id, status=nil)
+ def error(notice, message, attr=:id)
flash[:error] = notice
(err = Workflow.new.errors).add(attr, message)
respond_to do |format|
format.html { redirect_to workflows_url }
- format.xml do
- headers["WWW-Authenticate"] = %(Basic realm="Web Password") if status == 401
- render :text => notice, :status => status
- end
end
end
Modified: branches/events/app/helpers/application_helper.rb (3490 => 3491)
--- branches/events/app/helpers/application_helper.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/helpers/application_helper.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -234,25 +234,14 @@
link_to("Request Friendship", new_user_friendship_url(:user_id => user_id))
end
- def versioned_workflow_link(workflow_id, version_number, long_description=true)
- if workflow_id.kind_of? Fixnum
- workflow = Workflow.find(:first, :conditions => ["id = ?", workflow_id])
- return nil unless workflow
- elsif workflow_id.kind_of? Workflow
- workflow = workflow_id
+ def versioned_resource_link(resource, version_number, long_description=true)
+ ver = resource.find_version(version_number)
+ if ver
+ url = "" :version => version_number)
else
return nil
end
- if (ver = workflow.find_version(version_number))
- url = "" => 'workflows',
- :action ="" 'show',
- :id => workflow.id,
- :version => version_number)
- else
- return nil
- end
-
return nil unless url
if long_description
@@ -390,14 +379,6 @@
else
return nil
end
- when "Blog"
- if b = Blog.find(:first, :conditions => ["id = ?", contributableid])
- name = h(b.title)
-
- return link ? link_to(name, blog_url(b)) : name
- else
- return nil
- end
when "Workflow"
if w = Workflow.find(:first, :conditions => ["id = ?", contributableid])
name = h(w.title)
@@ -796,8 +777,6 @@
return "manhattan_studio/folder-closed_16.png"
when "remote-resource"
return "famfamfam_silk/page_world.png"
- when "blog"
- return "famfamfam_silk/note.png"
when "workflow"
return "redmond_studio/applications_16.png"
when "policy"
@@ -870,6 +849,10 @@
return "biocat_icon.png"
when "usercheck"
return "famfamfam_silk/flag_red.png"
+ when "transfer_ownership"
+ return "famfamfam_silk/key_go.png"
+ when "content"
+ return "famfamfam_silk/application_side_list.png"
else
return Conf.label_icons[method.to_s] if Conf.label_icons[method.to_s]
end
@@ -912,13 +895,7 @@
end
def highlight_all(text, string)
- rtn = text
-
- string.each(separator=" ") { |substr|
- rtn = highlight(text, substr)
- }
-
- return rtn
+ highlight(text, string.split(' '))
end
def workflows_for_attribution_form
@@ -1278,11 +1255,15 @@
perm
end
- def currentusers_things_url(thing)
+ def currentusers_things_url(klass)
return nil unless current_user
- return url_for(:controller => 'users',
- :id => current_user.id,
- :action ="" thing)
+ if Conf.contributable_models.include?(klass)
+ return polymorphic_url([current_user, klass.pluralize.underscore.to_sym])
+ else
+ return url_for(:controller => 'users',
+ :id => current_user.id,
+ :action ="" controller_visible_name(klass))
+ end
end
def view_privileges_notice
@@ -1430,7 +1411,7 @@
return rtn unless depth.to_i < 2
- collections = [[contributor], contributor.contributions, contributor.workflows, contributor.blogs]
+ collections = [[contributor], contributor.contributions, contributor.workflows]
recursions = []
case contributor.class.to_s
@@ -1549,19 +1530,6 @@
rtn << [item.created_at, "#{editor} created the #{link} #{item.contributable_type.downcase == "blob" ? "File" : item.contributable_type.downcase} for #{owner_string}."]
end
- when "Blog"
- if restrict_contributor
- return rtn unless (restrict_contributor.class.to_s == item.contributor_type.to_s and restrict_contributor.id.to_i == item.contributor_id.to_i)
- end
-
- owner = contributor(item.contributor_id, item.contributor_type)
-
- item.posts.each do |blog_post|
- next if before and blog_post.created_at > before
- next if after and blog_post.created_at < after
-
- rtn << [blog_post.created_at, "#{owner} has created a new post on #{contributable(item.id, "Blog")}."]
- end
when "Workflow"
item.versions.each do |workflow|
next if workflow.version.to_i == 1
@@ -1574,7 +1542,7 @@
next unless (workflow.contributor_type.to_s == restrict_contributor.class.to_s and workflow.contributor_id.to_i == restrict_contributor.id.to_i)
end
- rtn << [workflow.updated_at, "#{editor} edited the #{versioned_workflow_link(item.id, workflow.version, false)} Workflow."]
+ rtn << [workflow.updated_at, "#{editor} edited the #{versioned_resource_link(item, workflow.version, false)} Workflow."]
end
when "PictureSelection"
return rtn if before and item.created_at > before
@@ -1649,7 +1617,7 @@
def callback_url(item)
item_url = nil
- if session && session[:callback]:
+ if session && session[:callback]
case session[:callback][:format]
when 'uri'
item_url = rest_resource_uri(item)
@@ -1683,27 +1651,23 @@
result
end
- #Selects layout for contributables/groups or uses site's default
- def configure_layout
- contributable = (@workflow || @pack || @blog_post || @blob)
- layout = nil
-
- if params["layout_preview"]
- layout = Conf.layouts[params["layout_preview"]]
- elsif contributable && contributable.contribution
- layout = Conf.layouts[contributable.contribution.layout]
- if layout.nil?
- logger.error("Missing layout for #{contributable.class.name} #{contributable.id}: "+
- "#{contributable.contribution.layout}")
- end
- elsif @network
- layout = @network.layout
- if layout.nil?
- logger.error("Missing layout for Group address@hidden: address@hidden")
- end
+ def context_prefix(context)
+ case context
+ when User
+ prefix = "#{context.name}'"
+ prefix << 's' if context.name[-1] != 's'
+ when Network
+ prefix = context.name
+ else
+ prefix = ''
end
- @layout = layout || {"layout" => Conf.page_template, "stylesheets" => [Conf.stylesheet]}
+ prefix
end
+ # Creates a URL from a path and a hash of parameters
+ def url_with_params(url, params)
+ url + '?' + params.delete_if {|k,v| v.nil? || v.empty?}.to_query
+ end
+
end
Deleted: branches/events/app/helpers/blog_posts_helper.rb (3490 => 3491)
--- branches/events/app/helpers/blog_posts_helper.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/helpers/blog_posts_helper.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,7 +0,0 @@
-# myExperiment: app/helpers/blog_posts_helper.rb
-#
-# Copyright (c) 2007 University of Manchester and the University of Southampton.
-# See license.txt for details.
-
-module BlogPostsHelper
-end
Deleted: branches/events/app/helpers/blogs_helper.rb (3490 => 3491)
--- branches/events/app/helpers/blogs_helper.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/helpers/blogs_helper.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,7 +0,0 @@
-# myExperiment: app/helpers/blogs_helper.rb
-#
-# Copyright (c) 2007 University of Manchester and the University of Southampton.
-# See license.txt for details.
-
-module BlogsHelper
-end
Modified: branches/events/app/helpers/users_helper.rb (3490 => 3491)
--- branches/events/app/helpers/users_helper.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/helpers/users_helper.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -12,7 +12,6 @@
when 'Blob'; url = ""
when 'Workflow'; url = ""
when 'Pack'; url = ""
- when 'Blog'; url = ""
else; url = ""
end
Modified: branches/events/app/models/blob.rb (3490 => 3491)
--- branches/events/app/models/blob.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/blob.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -8,6 +8,7 @@
require 'acts_as_creditable'
require 'acts_as_attributor'
require 'acts_as_attributable'
+require 'sunspot_rails'
class Blob < ActiveRecord::Base
@@ -32,10 +33,24 @@
:mutable => [ :title, :body, :body_html ]
- acts_as_solr(:fields => [:title, :local_name, :body, :kind, :contributor_name, :tag_list],
- :boost => "rank",
- :include => [ :comments ]) if Conf.solr_enable
+ if Conf.solr_enable
+ searchable do
+ text :title, :as => 'title', :boost => 2.0
+ text :local_name, :as => 'file_name'
+ text :body, :as => 'description'
+ text :kind, :as => 'kind'
+ text :contributor_name, :as => 'contributor_name'
+ text :tags, :as => 'tag' do
+ tags.map { |tag| tag.name }
+ end
+
+ text :comments, :as => 'comment' do
+ comments.map { |comment| comment.comment }
+ end
+ end
+ end
+
belongs_to :content_blob, :dependent => :destroy
belongs_to :content_type
belongs_to :license
@@ -44,6 +59,7 @@
validates_presence_of :content_type
validates_presence_of :title
+ validates_presence_of :local_name
validates_each :content_blob do |record, attr, value|
if value.data.size > Conf.max_upload_size
Deleted: branches/events/app/models/blog.rb (3490 => 3491)
--- branches/events/app/models/blog.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/blog.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,26 +0,0 @@
-# myExperiment: app/models/blog.rb
-#
-# Copyright (c) 2007 University of Manchester and the University of Southampton.
-# See license.txt for details.
-
-require 'acts_as_site_entity'
-require 'acts_as_contributable'
-
-class Blog < ActiveRecord::Base
-
- acts_as_site_entity
-
- acts_as_contributable
-
- acts_as_bookmarkable
- acts_as_commentable
- acts_as_rateable
- acts_as_taggable
-
- has_many :posts,
- :class_name => "BlogPost",
- :order => "blog_posts.created_at DESC",
- :dependent => :destroy
-
- validates_presence_of :title
-end
Deleted: branches/events/app/models/blog_post.rb (3490 => 3491)
--- branches/events/app/models/blog_post.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/blog_post.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,12 +0,0 @@
-# myExperiment: app/models/blog_post.rb
-#
-# Copyright (c) 2007 University of Manchester and the University of Southampton.
-# See license.txt for details.
-
-class BlogPost < ActiveRecord::Base
- belongs_to :blog
-
- format_attribute :body
-
- validates_presence_of :title, :body
-end
Modified: branches/events/app/models/client_application.rb (3490 => 3491)
--- branches/events/app/models/client_application.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/client_application.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -6,9 +6,6 @@
:class_name => "KeyPermission",
:order => "key_permissions.for",
:dependent => :destroy
- belongs_to :creator,
- :class_name => "User",
- :foreign_key => "creator_id"
validates_presence_of :name,:url,:key,:secret
validates_uniqueness_of :key
before_validation_on_create :generate_keys
Modified: branches/events/app/models/comment.rb (3490 => 3491)
--- branches/events/app/models/comment.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/comment.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -10,8 +10,6 @@
has_many :activities, :as => :objekt, :dependent => :destroy
- acts_as_solr :fields => [ :comment ] if Conf.solr_enable
-
acts_as_simile_timeline_event(
:fields => {
:start => :created_at,
Modified: branches/events/app/models/content_blob.rb (3490 => 3491)
--- branches/events/app/models/content_blob.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/content_blob.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -7,8 +7,13 @@
require 'digest/sha1'
class ContentBlob < ActiveRecord::Base
- validates_presence_of :data
+ validate do |record|
+ if record.data.nil? || record.data.length == 0
+ record.errors.add(:data, 'cannot be empty.')
+ end
+ end
+
before_save do |blob|
blob.update_checksums
end
Copied: branches/events/app/models/deprecation_event.rb (from rev 3490, trunk/app/models/deprecation_event.rb) (0 => 3491)
--- branches/events/app/models/deprecation_event.rb (rev 0)
+++ branches/events/app/models/deprecation_event.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,10 @@
+class DeprecationEvent < ActiveRecord::Base
+
+ has_many :wsdl_deprecations
+ validates_presence_of :date
+
+ def affected_workflows
+ WorkflowProcessor.find_all_by_wsdl(wsdl_deprecations.map {|wd| wd.wsdl}, :include => :workflow).map {|wp| wp.workflow}.uniq.compact
+ end
+
+end
Modified: branches/events/app/models/federation_source.rb (3490 => 3491)
--- branches/events/app/models/federation_source.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/federation_source.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -3,12 +3,11 @@
# Copyright (c) 2007 University of Manchester and the University of Southampton.
# See license.txt for details.
-require 'lib/acts_as_site_entity'
-require 'lib/acts_as_contributor'
+require 'acts_as_site_entity'
+require 'acts_as_contributor'
class FederationSource < ActiveRecord::Base
acts_as_site_entity
acts_as_contributor
- acts_as_structured_data
end
Modified: branches/events/app/models/mailer.rb (3490 => 3491)
--- branches/events/app/models/mailer.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/mailer.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -2,10 +2,10 @@
helper :application
- def feedback(name, subject, content)
+ def feedback(name, subj, content)
recipients Conf.feedback_email_address
from Conf.notifications_email_address
- subject "#{Conf.sitename} feedback from #{name}"
+ subject "#{Conf.sitename} feedback from #{name}: #{subj}"
body :name => name,
:subject => subject,
Modified: branches/events/app/models/network.rb (3490 => 3491)
--- branches/events/app/models/network.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/network.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -6,6 +6,7 @@
require 'acts_as_contributor'
require 'acts_as_creditor'
require 'acts_as_site_entity'
+require 'sunspot_rails'
class Network < ActiveRecord::Base
acts_as_contributor
@@ -17,14 +18,28 @@
acts_as_taggable
has_many :blobs, :as => :contributor
- has_many :blogs, :as => :contributor
has_many :workflows, :as => :contributor
-
- acts_as_solr(:fields => [ :title, :unique_name, :owner_name, :description, :tag_list ],
- :include => [ :comments ]) if Conf.solr_enable
+ has_many :policies, :as => :contributor
+ if Conf.solr_enable
+ searchable do
+ text :title, :as => 'title', :boost => 2.0
+ text :unique_name
+ text :owner_name, :as => 'owner_name'
+ text :description, :as => 'description'
+
+ text :tags, :as => 'tag' do
+ tags.map { |tag| tag.name }
+ end
+
+ text :comments, :as => 'comment' do
+ comments.map { |comment| comment.comment }
+ end
+ end
+ end
+
format_attribute :description
-
+
def self.recently_created(limit=5)
self.find(:all, :order => "created_at DESC", :limit => limit)
end
@@ -44,7 +59,6 @@
validates_associated :owner
validates_presence_of :user_id, :title
-
# bugfix. after unique_name has been set, if you un-set it, Rails throws an error!
validates_uniqueness_of :unique_name, :if => Proc.new { |network| !(network.unique_name.nil? or network.unique_name.empty?) }
@@ -61,6 +75,10 @@
def owner_name
owner.name
end
+
+ def name
+ title
+ end
# announcements belonging to the group;
#
@@ -166,21 +184,15 @@
# Finds all the contributions that have been explicitly shared via Permissions
def shared_contributions
- list = []
- self.permissions.each do |p|
- p.policy.contributions.each do |c|
- list << c unless c.nil? || c.contributable.nil?
- end
- end
- list
+ Contribution.find(:all,
+ :select => "contributions.*",
+ :joins => "JOIN policies p on (contributions.policy_id = p.id) JOIN permissions e on (p.id = e.policy_id)",
+ :conditions => [ "e.contributor_id=? AND e.contributor_type = 'Network'", id ])
end
# Finds all the contributables that have been explicitly shared via Permissions
def shared_contributables
- c = shared_contributions.map do |c| c.contributable end
-
- # filter out blogs until they've gone completely
- c.select do |x| x.class != Blog end
+ shared_contributions.map {|c| c.contributable }
end
# New member policy
@@ -227,4 +239,23 @@
def layout
Conf.layouts[layout_name]
end
+
+ after_save :update_administrators
+
+ private
+
+ # If owner changes, make old owner into an adminstrator, and delete the new owner's membership status
+ # (as group owners do not have a membership)
+ def update_administrators
+ if user_id_changed?
+ if (user_id)
+ Membership.find_by_user_id_and_network_id(user_id, id).try(:destroy) # delete membership of new owner
+ end
+ if (user_id_was)
+ Membership.create(:user_id => user_id_was, :network_id => id,
+ :administrator => true, :invited_by => User.find(user_id)).accept! # create membership for old owner
+ end
+ end
+ end
+
end
Modified: branches/events/app/models/pack.rb (3490 => 3491)
--- branches/events/app/models/pack.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/pack.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -9,8 +9,8 @@
require 'zip/zip'
require 'tempfile'
require 'cgi'
+require 'sunspot_rails'
-
class Pack < ActiveRecord::Base
acts_as_site_entity :owner_text => 'Creator'
@@ -24,28 +24,53 @@
has_many :relationships, :dependent => :destroy, :as => :context
+ has_many :versions, :class_name => "PackVersion"
+
+ belongs_to :license
+
+ def find_version(version)
+ match = versions.find(:first, :conditions => ["version = ?", version])
+ return match if match
+
+ raise ActiveRecord::RecordNotFound.new("Couldn't find Pack with pack_id=#{id} and version=#{version}")
+ end
+
validates_presence_of :title
format_attribute :description
- acts_as_solr(:fields => [ :title, :description, :contributor_name, :tag_list ],
- :boost => "rank",
- :include => [ :comments ]) if Conf.solr_enable
-
+ if Conf.solr_enable
+ searchable do
+ text :title, :as => 'title', :boost => 2.0
+ text :description, :as => 'description'
+ text :contributor_name, :as => 'contributor_name'
+
+ text :tags, :as => 'tag' do
+ tags.map { |tag| tag.name }
+ end
+
+ text :comments, :as => 'comment' do
+ comments.map { |comment| comment.comment }
+ end
+ end
+ end
+
has_many :contributable_entries,
:class_name => "PackContributableEntry",
:foreign_key => :pack_id,
+ :conditions => "version IS NULL",
:order => "created_at DESC",
:dependent => :destroy
has_many :remote_entries,
:class_name => "PackRemoteEntry",
:foreign_key => :pack_id,
+ :conditions => "version IS NULL",
:order => "created_at DESC",
:dependent => :destroy
def items_count
- return contributable_entries.count + remote_entries.count
+ contributable_entries.count + remote_entries.count
end
# returns packs that have largest total number of items
@@ -631,6 +656,58 @@
APIStatistics.statistics(self)
end
+ def snapshot!
+
+ self.current_version = self.current_version ? self.current_version + 1 : 1
+
+ inhibit_timestamps do
+
+ version = versions.build(
+ :version => current_version,
+ :contributor => contributor,
+ :title => title,
+ :description => description,
+ :description_html => description_html)
+
+ contributable_entries.each do |entry|
+
+ version.contributable_entries.build(
+ :pack => self,
+ :contributable_id => entry.contributable_id,
+ :contributable_type => entry.contributable_type,
+ :contributable_version => entry.contributable_version,
+ :comment => entry.comment,
+ :user_id => entry.user_id,
+ :version => current_version,
+ :created_at => entry.created_at,
+ :updated_at => entry.updated_at)
+ end
+
+ remote_entries.each do |entry|
+
+ tt = version.remote_entries.build(
+ :pack => self,
+ :title => entry.title,
+ :uri => entry.uri,
+ :alternate_uri => entry.alternate_uri,
+ :comment => entry.comment,
+ :user_id => entry.user_id,
+ :version => current_version,
+ :created_at => entry.created_at,
+ :updated_at => entry.updated_at)
+ end
+ end
+
+ save
+ end
+
+ def describe_version(version_number)
+ return "" if versions.count < 2
+ return "(earliest)" if version_number == versions.first.version
+ return "(latest)" if version_number == versions.last.version
+ return ""
+ end
+
protected
# produces html string containing the required messaged, enclosed within left-padded P tag, belonging to 'none_text' class
Modified: branches/events/app/models/pack_contributable_entry.rb (3490 => 3491)
--- branches/events/app/models/pack_contributable_entry.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/pack_contributable_entry.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -21,12 +21,26 @@
after_destroy :touch_pack
def check_unique
- if self.contributable_version.blank?
- i = PackContributableEntry.find(:first, :conditions => ["pack_id = ? AND contributable_type = ? AND contributable_id = ? AND contributable_version IS NULL", self.pack_id, self.contributable_type, self.contributable_id])
+
+ conditions = ["pack_id = ?", "version = ?", "contributable_type = ?", "contributable_id = ?"]
+ arguments = [self.pack_id, self.version, self.contributable_type, self.contributable_id]
+
+ if self.contributable_version.nil?
+ conditions << "contributable_version IS NULL"
else
- i = PackContributableEntry.find(:first, :conditions => ["pack_id = ? AND contributable_type = ? AND contributable_id = ? AND contributable_version = ?", self.pack_id, self.contributable_type, self.contributable_id, self.contributable_version])
+ conditions << "contributable_version = ?"
+ arguments << self.contributable_version
end
-
+
+ if self.version.nil?
+ conditions << "version IS NULL"
+ else
+ conditions << "version = ?"
+ arguments << self.version
+ end
+
+ i = PackContributableEntry.find(:first, :conditions => [conditions.join(" AND ")] + arguments)
+
if i
errors.add_to_base("This item already exists in the pack")
return false
@@ -71,7 +85,7 @@
end
def item_as_list
- return [contributable]
+ return [get_contributable_version]
end
def touch_pack
Modified: branches/events/app/models/pack_remote_entry.rb (3490 => 3491)
--- branches/events/app/models/pack_remote_entry.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/pack_remote_entry.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -19,7 +19,7 @@
after_destroy :touch_pack
def check_unique
- if PackRemoteEntry.find(:first, :conditions => ["pack_id = ? AND uri = ?", self.pack_id, self.uri])
+ if PackRemoteEntry.find(:first, :conditions => ["pack_id = ? AND version = ? AND uri = ?", self.pack_id, self.version, self.uri])
errors.add_to_base("This external link already exists in the pack")
return false
else
Copied: branches/events/app/models/pack_version.rb (from rev 3490, trunk/app/models/pack_version.rb) (0 => 3491)
--- branches/events/app/models/pack_version.rb (rev 0)
+++ branches/events/app/models/pack_version.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,50 @@
+# myExperiment: app/models/pack_version.rb
+#
+# Copyright (c) 2012 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+class PackVersion < ActiveRecord::Base
+
+ validates_presence_of :title
+
+ belongs_to :pack
+ belongs_to :contributor, :polymorphic => true
+
+ format_attribute :description
+
+ has_many :contributable_entries,
+ :class_name => "PackContributableEntry",
+ :dependent => :destroy,
+ :finder_sql =>
+ 'SELECT *
+ FROM pack_contributable_entries
+ WHERE pack_id = #{pack_id} AND version = #{version}
+ ORDER BY created_at DESC'
+
+ has_many :remote_entries,
+ :class_name => "PackRemoteEntry",
+ :dependent => :destroy,
+ :finder_sql =>
+ 'SELECT *
+ FROM pack_remote_entries
+ WHERE pack_id = #{pack_id} AND version = #{version}
+ ORDER BY created_at DESC'
+
+ def items_count
+ contributable_entries.count + remote_entries.count
+ end
+
+ def versioned_resource
+ pack
+ end
+
+ def items_count
+ return contributable_entries.count + remote_entries.count
+ end
+
+ def contributables
+ contributable_entries.map do |e| e.contributable end
+ end
+
+end
+
Modified: branches/events/app/models/policy.rb (3490 => 3491)
--- branches/events/app/models/policy.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/policy.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -61,4 +61,8 @@
end
end
end
+
+ def group_policy?
+ contributor_type == "Network"
+ end
end
Modified: branches/events/app/models/profile.rb (3490 => 3491)
--- branches/events/app/models/profile.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/profile.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -39,17 +39,6 @@
acts_as_site_entity :owner_text => 'User'
- acts_as_solr :fields => [ :email,
- :website,
- :body,
- :field_or_industry,
- :occupation_or_roles,
- :organisations,
- :location_city,
- :location_country,
- :interests,
- :contact_details ] if Conf.solr_enable
-
def avatar?
not (picture_id.nil? or picture_id.zero?)
end
Modified: branches/events/app/models/review.rb (3490 => 3491)
--- branches/events/app/models/review.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/review.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -12,8 +12,6 @@
before_create :check_multiple
- acts_as_solr :fields => [ :title, :review ] if Conf.solr_enable
-
# returns the 'last created' Reviews
# the maximum number of results is set by #limit#
def self.latest(limit=10)
Copied: branches/events/app/models/semantic_annotation.rb (from rev 3490, trunk/app/models/semantic_annotation.rb) (0 => 3491)
--- branches/events/app/models/semantic_annotation.rb (rev 0)
+++ branches/events/app/models/semantic_annotation.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,3 @@
+class SemanticAnnotation < ActiveRecord::Base
+ belongs_to :subject, :polymorphic => true
+end
Modified: branches/events/app/models/service.rb (3490 => 3491)
--- branches/events/app/models/service.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/service.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -3,8 +3,9 @@
# Copyright (c) 2007 University of Manchester and the University of Southampton.
# See license.txt for details.
-require 'lib/acts_as_site_entity'
-require 'lib/acts_as_contributable'
+require 'acts_as_site_entity'
+require 'acts_as_contributable'
+require 'sunspot_rails'
class Service < ActiveRecord::Base
acts_as_site_entity
@@ -15,12 +16,28 @@
has_many :service_tags
has_many :service_deployments
- acts_as_solr(:fields => [ :submitter_label, :name, :provider_label, :endpoint,
- :wsdl, :city, :country, :description, :extra_search_terms ]) if Conf.solr_enable
+ if Conf.solr_enable
+ searchable do
+ text :submitter_label
+ text :name
+ text :provider_label
+ text :endpoint
+ text :wsdl
+ text :city
+ text :country
+ text :description
- def extra_search_terms
- service_categories.map do |category| category.label end +
- service_tags.map do |tag| tag.label end +
- service_types.map do |types| types.label end
+ text :categories do
+ service_categories.map do |category| category.label end
+ end
+
+ text :tags do
+ service_tags.map do |tag| tag.label end
+ end
+
+ text :types do
+ service_types.map do |types| types.label end
+ end
+ end
end
end
Modified: branches/events/app/models/taverna_enactor.rb (3490 => 3491)
--- branches/events/app/models/taverna_enactor.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/taverna_enactor.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -7,6 +7,7 @@
require 'enactor/client'
require 'document/data'
require 'document/report'
+require 'encrypted_attributes'
class TavernaEnactor < ActiveRecord::Base
@@ -16,11 +17,11 @@
validates_presence_of :contributor
validates_presence_of :username
- validates_presence_of :crypted_password
+ validates_presence_of :password
validates_presence_of :url
validates_presence_of :title
- encrypts :password, :mode => :symmetric, :key => Conf.sym_encryption_key
+ encrypts :password, :mode => :symmetric, :password => Conf.sym_encryption_key
def label
title
@@ -172,6 +173,6 @@
# Lazy loading of enactor service client.
def service_client
- @client ||= Enactor::Client.new(self.url, self.username, self.crypted_password.decrypt)
+ @client ||= Enactor::Client.new(self.url, self.username, self.password.decrypt)
end
end
Modified: branches/events/app/models/user.rb (3490 => 3491)
--- branches/events/app/models/user.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/user.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -8,6 +8,7 @@
require 'acts_as_site_entity'
require 'acts_as_contributor'
require 'acts_as_creditor'
+require 'sunspot_rails'
class User < ActiveRecord::Base
@@ -290,14 +291,31 @@
acts_as_contributor
has_many :blobs, :as => :contributor, :dependent => :destroy
- has_many :blogs, :as => :contributor, :dependent => :destroy
has_many :workflows, :as => :contributor, :dependent => :destroy
has_many :packs, :as => :contributor, :dependent => :destroy
acts_as_creditor
- acts_as_solr(:fields => [ :name, :tag_list ], :include => [ :profile ], :if => "activated_at") if Conf.solr_enable
+ if Conf.solr_enable
+ searchable :if => :activated_at do
+ text :name, :as => 'name', :boost => 2.0
+ text :email, :as => 'email' do profile.email end
+ text :website, :as => 'website' do profile.website end
+ text :body, :as => 'description' do profile.body end
+ text :field_or_industry, :as => 'field_or_industry' do profile.field_or_industry end
+ text :occupation_or_roles, :as => 'occupation_or_role' do profile.occupation_or_roles end
+ text :organisations, :as => 'organisation' do profile.organisations end
+ text :location_city, :as => 'city' do profile.location_city end
+ text :location_country, :as => 'country' do profile.location_country end
+ text :interests, :as => 'interest' do profile.interests end
+ text :contact_details, :as => 'contact' do profile.contact_details end
+ text :tags, :as => 'tag' do
+ tags.map { |tag| tag.name }
+ end
+ end
+ end
+
validates_presence_of :name
has_one :profile,
@@ -632,6 +650,11 @@
self.spam_score = score
end
+ # Shared group policies that the user can apply to their uploaded resources
+ def group_policies
+ all_networks.map {|n| n.policies}.flatten
+ end
+
protected
# clean up emails and username before validation
@@ -732,7 +755,7 @@
# END DEBUG
end
end
-
+
private
# clean string to remove spaces and force lowercase
Modified: branches/events/app/models/workflow.rb (3490 => 3491)
--- branches/events/app/models/workflow.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/workflow.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -10,7 +10,8 @@
require 'acts_as_attributable'
require 'acts_as_reviewable'
require 'acts_as_runnable'
-require 'lib/previews'
+require 'previews'
+require 'sunspot_rails'
require 'scufl/model'
require 'scufl/parser'
@@ -25,6 +26,10 @@
belongs_to :content_type
belongs_to :license
+ has_many :workflow_processors, :dependent => :destroy
+ has_many :workflow_ports, :dependent => :destroy
+ has_many :semantic_annotations, :as => :subject, :dependent => :destroy
+
before_validation :check_unique_name
before_validation :apply_extracted_metadata
@@ -44,23 +49,46 @@
acts_as_reviewable
- acts_as_structured_data
-
has_previews
has_versions :workflow_versions,
:attributes => [ :contributor, :title, :unique_name, :body, :body_html,
:content_blob_id, :file_ext, :last_edited_by,
- :content_type_id, :preview_id, :image, :svg ],
+ :content_type_id, :preview_id, :image, :svg,
+ :revision_comments],
:mutable => [ :contributor, :title, :unique_name, :body, :body_html,
:file_ext, :last_edited_by, :content_type_id, :image, :svg ]
- acts_as_solr(:fields => [ :title, :body, :filename, :tag_list, :contributor_name, :kind, :get_all_search_terms ],
- :boost => "rank",
- :include => [ :comments ]) if Conf.solr_enable
+ if Conf.solr_enable
+ searchable do
+ text :title, :as => 'title', :boost => 2.0
+ text :body, :as => 'description'
+ text :filename, :as => 'file_name'
+ text :contributor_name, :as => 'contributor_name'
+ text :kind, :as => 'kind'
+ text :get_all_search_terms
+
+ text :tags, :as => 'tag' do
+ tags.map { |tag| tag.name }
+ end
+
+ text :comments, :as => 'comment' do
+ comments.map { |comment| comment.comment }
+ end
+
+ text :review_titles, :as => 'review_title' do
+ reviews.map { |review| review.title }
+ end
+
+ text :review_bodies, :as => 'review_body' do
+ reviews.map { |review| review.review }
+ end
+ end
+ end
+
acts_as_runnable
validates_presence_of :title
@@ -228,11 +256,26 @@
def filename(version=nil)
+ def aux(record)
+
+ extension = ""
+
+ if record.processor_class && record.processor_class.default_file_extension
+ extension = ".#{record.processor_class.default_file_extension}"
+ end
+
+ if record.file_ext
+ extension = ".#{record.file_ext}"
+ end
+
+ extension
+ end
+
if version.blank?
- return "#{unique_name}.#{file_ext || self.processor_class.default_file_extension}"
+ "#{unique_name}#{aux(self)}"
else
- return nil unless (workflow_version = self.find_version(version))
- return "#{workflow_version.unique_name}.#{workflow_version.file_ext || workflow_version.processor_class.default_file_extension}"
+ workflow_version = self.find_version(version)
+ "#{workflow_version.unique_name}#{aux(workflow_version)}"
end
end
@@ -242,14 +285,18 @@
def get_all_search_terms
- words = StringIO.new
+ begin
+ words = StringIO.new
- versions.each do |version|
- words << get_search_terms(version.version)
+ versions.each do |version|
+ words << get_search_terms(version.version)
+ end
+
+ words.rewind
+ words.read
+ rescue
+ nil
end
-
- words.rewind
- words.read
end
def get_tag_suggestions()
@@ -316,6 +363,7 @@
def delete_metadata
if processor_class
WorkflowProcessor.destroy_all(["workflow_id = ?", id])
+ WorkflowPort.destroy_all(["workflow_id = ?", id])
end
end
@@ -323,14 +371,14 @@
if processor_class
delete_metadata
begin
- processor_class.new(content_blob.data).extract_metadata(id)
+ processor_class.new(content_blob.data).extract_metadata(self)
rescue
end
end
end
def unique_wsdls
- WorkflowProcessor.find(:all, :conditions => ['workflow_id = ? AND wsdl IS NOT NULL', 16]).map do |wp| wp.wsdl end.uniq
+ WorkflowProcessor.find(:all, :conditions => ['workflow_id = ? AND wsdl IS NOT NULL', id]).map do |wp| wp.wsdl end.uniq
end
def workflows_with_similar_services
@@ -364,4 +412,9 @@
APIStatistics.statistics(self)
end
+ # Returns a hash map of lists of wsdls grouped by their related deprecation event
+ def deprecations
+ WsdlDeprecation.find_all_by_wsdl(workflow_processors.map {|wp| wp.wsdl}).group_by {|wd| wd.deprecation_event}
+ end
+
end
Copied: branches/events/app/models/workflow_port.rb (from rev 3490, trunk/app/models/workflow_port.rb) (0 => 3491)
--- branches/events/app/models/workflow_port.rb (rev 0)
+++ branches/events/app/models/workflow_port.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,5 @@
+class WorkflowPort < ActiveRecord::Base
+ validates_inclusion_of :port_type, :in => ["input", "output"]
+ belongs_to :workflow
+ has_many :semantic_annotations, :as => :subject, :dependent => :destroy
+end
Modified: branches/events/app/models/workflow_processor.rb (3490 => 3491)
--- branches/events/app/models/workflow_processor.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/workflow_processor.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -5,5 +5,6 @@
class WorkflowProcessor < ActiveRecord::Base
belongs_to :workflow
+ has_many :semantic_annotations, :as => :subject, :dependent => :destroy
end
Modified: branches/events/app/models/workflow_sweeper.rb (3490 => 3491)
--- branches/events/app/models/workflow_sweeper.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/workflow_sweeper.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -22,8 +22,8 @@
end
def after_destroy(workflow)
- expire_sidebar_assets(workflow.contribution.contributor_id) if workflow.contribution.contributor_type == 'User'
- expire_listing(workflow.contribution.contributor_id, workflow.contribution.contributor_type) if workflow.contribution.contributor_type == 'Network'
+ expire_sidebar_assets(workflow.contributor_id) if workflow.contributor_type == 'User'
+ expire_listing(workflow.contributor_id, workflow.contributor_type) if workflow.contributor_type == 'Network'
expire_listing(workflow.id, 'Workflow')
expire_home_cache
end
Modified: branches/events/app/models/workflow_version.rb (3490 => 3491)
--- branches/events/app/models/workflow_version.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/models/workflow_version.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -3,7 +3,7 @@
# Copyright (c) 2012 University of Manchester and the University of Southampton.
# See license.txt for details.
-require 'lib/previews'
+require 'previews'
class WorkflowVersion < ActiveRecord::Base
Copied: branches/events/app/models/wsdl_deprecation.rb (from rev 3490, trunk/app/models/wsdl_deprecation.rb) (0 => 3491)
--- branches/events/app/models/wsdl_deprecation.rb (rev 0)
+++ branches/events/app/models/wsdl_deprecation.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,10 @@
+class WsdlDeprecation < ActiveRecord::Base
+
+ validates_uniqueness_of :wsdl, :scope => :deprecation_event_id
+ belongs_to :deprecation_event
+
+ def affected_workflows
+ WorkflowProcessor.find_all_by_wsdl(wsdl, :include => :workflow).map {|wp| wp.workflow}.uniq.compact
+ end
+
+end
Modified: branches/events/app/views/announcements/_form.rhtml (3490 => 3491)
--- branches/events/app/views/announcements/_form.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/announcements/_form.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<%= error_messages_for 'announcement' %>
@@ -7,6 +7,6 @@
<%= form.text_field :title, :size => 70 %></p>
<p><label for=""
-<%= fckeditor_textarea(:announcement, :body, :toolbarSet => 'Simple', :width => '700px', :height => '500px') %></p>
+<%= form.text_area(:body, :width => '700px', :height => '500px', :class => 'ckeditor') -%>
<!--[eoform:announcement]-->
Modified: branches/events/app/views/blobs/_breadcrumbs.rhtml (3490 => 3491)
--- branches/events/app/views/blobs/_breadcrumbs.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/blobs/_breadcrumbs.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,5 +1,14 @@
-<li><%= link_to 'Files', blobs_path -%></li>
+<% if @context %>
+ <li><%= link_to visible_name(@context).pluralize, polymorphic_url(@context.class.name.underscore.pluralize) %></li>
+ <li><%= link_to @context.name, @context %></li>
+<% end %>
+<% if controller.action_name == 'index' %>
+ <li>Files</li>
+<% else %>
+ <li><%= link_to 'Files', blobs_path %></li>
+<% end %>
+
<% if ["show", "new", "edit", "all", "search", "suggestions"].include? controller.action_name.to_s -%>
<% case controller.action_name.to_s; when "show" -%>
Modified: branches/events/app/views/blobs/_table.rhtml (3490 => 3491)
--- branches/events/app/views/blobs/_table.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/blobs/_table.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,107 +1,112 @@
<% query ||= false -%>
-<% odd_row = false -%>
-<% unless collection.empty? %>
-<table class="alt_table">
- <% for blob in collection %>
- <% # If only one item in collection, check if 'show' permission is available (eg: if this partial was called from contributions/table) -%>
- <% if collection.size == 1 -%>
- <% show ||= Authorization.check('view', blob, current_user) -%>
- <% else -%>
- <% show = Authorization.check('view', blob, current_user) -%>
- <% end -%>
- <% if show -%>
- <tr class="<%= (odd_row = !odd_row) ? "odd_row" : "even_row" %>">
- <% cache(:controller => 'files_cache', :action ="" 'listing', :id => blob.id) do -%>
- <td style="width: 100px;">
- <p style="margin-top:0; padding-top:0; text-align: center;"><b>Uploader:</b></p>
- <center><%= contributor(blob.contribution.contributor_id, blob.contribution.contributor_type, true, 60) %></center>
- </td>
- <td style="text-align: left;">
- <a name="<%= blob.local_name.gsub(/ /, "_") %>"></a>
- <p class="title">
- <%= icon "blob", nil, nil, nil, '' %>
- <% title = contributable_name(blob.id, 'Blob') %>
- <%=link_to(query ? highlight_all(title, query) : title, blob_path(blob)) %>
- </p>
-
- <p style="font-size: 85%; margin-top: 0; padding-top: 0;">
- <b>Created:</b> <%=datetime blob.contribution.created_at, false %>
- <% unless blob.contribution.created_at == blob.contribution.updated_at %>
- | <b>Last updated:</b> <%=datetime blob.contribution.updated_at, false %>
- <% end %>
- </p>
-
- <% unless (creditors = blob.creditors).empty? %>
- <p style="font-size:85%;">
- <b>Credits:</b>
- <% creditors.each do |c| %>
- <% if c.creditor_type == 'User' %>
- <%= icon('user', nil, nil, nil, '') %>
- <% elsif c.creditor_type == 'Network' %>
- <%= icon('network-member', nil, nil, nil, '') %>
- <% end %>
- <%= contributor(c.creditor_id, c.creditor_type) %>
- <% end %>
- </p>
- <% end %>
- <% unless (attributors = blob.attributors).empty? %>
- <p style="font-size:85%;">
- <b>Attributions:</b>
- <% attributors.each do |a| %>
- <% if Authorization.check("view", a.attributor, current_user) -%>
- <% if a.attributor_type == 'Workflow' %>
- <%= icon('workflow', nil, nil, nil, '') %>
- <% elsif a.attributor_type == 'Blob' %>
- <%= icon('blob', nil, nil, nil, '') %>
- <% end %>
- <%= contributable(a.attributor_id, a.attributor_type) %>
- <% end -%>
- <% end %>
- </p>
- <% end %>
-
- <% if blob.license_id.nil? %>
- <p style="font-size:85%;"><b>License: </b>No license</p>
- <% else %>
- <p style="font-size:85%;"><b>License: </b><% @license = License.find(blob.license_id) %><%= link_to h(@license.title), license_path(@license) %></p>
+<% collection.each do |blob| %>
+ <% # If only one item in collection, check if 'show' permission is available (eg: if this partial was called from contributions/table) -%>
+ <% if collection.size == 1 -%>
+ <% show ||= Authorization.check('view', blob, current_user) -%>
+ <% else -%>
+ <% show = Authorization.check('view', blob, current_user) -%>
+ <% end -%>
+ <% if show -%>
+
+ <div class="resource_list_item <%= blob.contribution.policy.layout -%>">
+
+ <div class="avatar_panel">
+ <span class="owner"><%= owner_text blob -%></span>
+ <%= contributor(blob.contribution.contributor_id, blob.contribution.contributor_type, true, 60) %>
+ <% if layout = blob.contribution.policy.layout %>
+ <% begin %>
+ <%= render :partial => "layouts/skins/branding/#{layout}" %>
+ <% rescue ActionView::MissingTemplate %>
+ <% end %>
+ <% end %>
+ </div>
+
+ <div class="main_panel">
+
+ <div class="actions">
+ <%= icon "show", blob_path(blob), nil, nil, "View" %>
+ <% if Authorization.check("download", blob, current_user) %><%= icon "download", download_blob_path(blob) %><% end %>
+ <% if mine?(blob) %><%= icon "manage", edit_blob_path(blob), nil, nil, "Manage" %><% end %>
+ </div>
+
+ <% cache(:controller => 'files_cache', :action ="" 'listing', :id => blob.id) do -%>
+ <a name="<%= blob.local_name.gsub(/ /, "_") %>"></a>
+ <p class="title">
+ <%= icon "blob", nil, nil, nil, '' %>
+ <% truncated_title = truncate(blob.title, :length => 55) %>
+ <%=link_to(query ? highlight_all(truncated_title, query) : truncated_title, blob_path(blob),
+ :title => blob.title) %>
+ </p>
+
+ <p>
+ <b>Created:</b> <%=datetime blob.contribution.created_at, false %>
+ <% unless blob.contribution.created_at == blob.contribution.updated_at %>
+ | <b>Last updated:</b> <%=datetime blob.contribution.updated_at, false %>
<% end %>
-
- <div class="desc" style="font-size: 85%;">
- <% if blob.body and blob.body.length > 0 %>
- <% desc = truncate(strip_html(blob.body), :length => 500) %>
- <%= query ? highlight_all(desc, query) : desc %>
- <% else -%>
- <span class="none_text">No description</span>
- <% end %>
- </div>
-
- <p style="font-size:85%;"><b>File type: </b><%= h blob.content_type.title %></p>
-
- <p style="font-size: 85%;">
- <a href="" blob_path(blob) + '#ratings' -%>"><b>Rating: </b><%= number_with_precision(blob.rating, :precision => 1) %> / 5 (<%= pluralize blob.ratings.count, 'rating' %>)</a> |
- <a href="" blob_path(blob) + '#comments' -%>"><b>Comments: </b><%= blob.comments.count %></a> |
- <b>Viewed:</b> <%=pluralize blob.contribution.site_viewings_count, "time" %> |
- <b>Downloaded:</b> <%=pluralize blob.contribution.site_downloads_count, "time" %>
- </p>
-
- <% unless (tags = blob.tags).empty? %>
- <a href="" blob_path(blob) + '#tags' -%>"><p style="font-size: 85%;"><b>Tags:</b></p></a>
- <div style="display:inline;" class="tags_onesize"><%= tag_cloud_from_collection tags, true %></div>
- <% else %>
- <p style="font-size: 85%;"><i>This File has no tags!</i></p>
- <% end %>
- </td>
- <% end %>
-
- <td class="actions" style="width: 80px;">
- <%= icon "show", blob_path(blob), nil, nil, "View" %>
- <% if Authorization.check("download", blob, current_user) %><%= icon "download", download_blob_path(blob) %><% end %>
- <% if mine?(blob) %><%= icon "manage", edit_blob_path(blob), nil, nil, "Manage" %><% end %>
- </td>
- </tr>
- <% end %>
- <% end %>
-</table>
+ </p>
+ <% unless (creditors = blob.creditors).empty? %>
+ <p>
+ <b>Credits:</b>
+ <% creditors.each do |c| %>
+ <% if c.creditor_type == 'User' %>
+ <%= icon('user', nil, nil, nil, '') %>
+ <% elsif c.creditor_type == 'Network' %>
+ <%= icon('network-member', nil, nil, nil, '') %>
+ <% end %>
+ <%= contributor(c.creditor_id, c.creditor_type) %>
+ <% end %>
+ </p>
+ <% end %>
+ <% unless (attributors = blob.attributors).empty? %>
+ <p>
+ <b>Attributions:</b>
+ <% attributors.each do |a| %>
+ <% if Authorization.check("view", a.attributor, current_user) -%>
+ <% if a.attributor_type == 'Workflow' %>
+ <%= icon('workflow', nil, nil, nil, '') %>
+ <% elsif a.attributor_type == 'Blob' %>
+ <%= icon('blob', nil, nil, nil, '') %>
+ <% end %>
+ <%= contributable(a.attributor_id, a.attributor_type) %>
+ <% end -%>
+ <% end %>
+ </p>
+ <% end %>
+
+ <% if blob.license_id.nil? %>
+ <p><b>License: </b>No license</p>
+ <% else %>
+ <p><b>License: </b><% @license = License.find(blob.license_id) %><%= link_to h(@license.title), license_path(@license) %></p>
+ <% end %>
+
+ <div class="desc">
+ <% if blob.body and blob.body.length > 0 %>
+ <% desc = truncate(strip_html(blob.body), :length => 500) %>
+ <%= query ? highlight_all(desc, query) : desc %>
+ <% else -%>
+ <span class="none_text">No description</span>
+ <% end %>
+ </div>
+
+ <p><b>File type: </b><%= h blob.content_type.title %></p>
+
+ <p>
+ <a href="" blob_path(blob) + '#ratings' -%>"><b>Rating: </b><%= number_with_precision(blob.rating, :precision => 1) %> / 5 (<%= pluralize blob.ratings.count, 'rating' %>)</a> |
+ <a href="" blob_path(blob) + '#comments' -%>"><b>Comments: </b><%= blob.comments.count %></a> |
+ <b>Viewed:</b> <%=pluralize blob.contribution.site_viewings_count, "time" %> |
+ <b>Downloaded:</b> <%=pluralize blob.contribution.site_downloads_count, "time" %>
+ </p>
+
+ <% unless (tags = blob.tags).empty? %>
+ <a href="" blob_path(blob) + '#tags' -%>"><p><b>Tags:</b></p></a>
+ <div style="display:inline;" class="tags_onesize"><%= tag_cloud_from_collection tags, true %></div>
+ <% else %>
+ <p><i>This File has no tags!</i></p>
+ <% end %>
+ <% end %>
+ </div>
+ </div>
+ <% end %>
<% end %>
Modified: branches/events/app/views/blobs/edit.rhtml (3490 => 3491)
--- branches/events/app/views/blobs/edit.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/blobs/edit.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,6 @@
<% t "Manage" -%>
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<%= _javascript__include_tag "osp.js" %>
<h1>Manage File: <%= contributable_name(@blob.id, 'Blob') %></h1>
@@ -31,7 +31,7 @@
<strong>Description: </strong>
</p>
<center>
- <%= fckeditor_textarea(:blob, :body, :toolbarSet => 'Simple', :width => '600px', :height => '300px') %>
+ <%= f.text_area(:body, :width => '600px', :height => '300px', :class => 'ckeditor') %>
</center>
<br/>
Modified: branches/events/app/views/blobs/index.rhtml (3490 => 3491)
--- branches/events/app/views/blobs/index.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/blobs/index.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<h1>Files</h1>
+<h1><%= context_prefix(@context) -%> Files</h1>
<%= render :partial => "content/index" -%>
Modified: branches/events/app/views/blobs/new.rhtml (3490 => 3491)
--- branches/events/app/views/blobs/new.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/blobs/new.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,6 @@
<% t "New" -%>
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<%= _javascript__include_tag "osp.js" %>
<h1>Upload File</h1>
@@ -28,7 +28,7 @@
<strong>Description: </strong>
</p>
<center>
- <%= fckeditor_textarea(:blob, :body, :toolbarSet => 'Simple', :width => '600px', :height => '300px') %>
+ <%= text_area_tag('blob[body]', nil, :width => '600px', :height => '300px', :class => 'ckeditor') %>
</center>
<br />
Modified: branches/events/app/views/blobs/show.rhtml (3490 => 3491)
--- branches/events/app/views/blobs/show.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/blobs/show.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -47,12 +47,14 @@
<b>File name:</b>
<%=h @version.local_name %>
</p>
-
+
+ <% if @version.content_type %>
<p>
<b>File type:</b>
<%=h @version.content_type.title %>
</p>
-
+ <% end %>
+
<br/>
<h3>
Modified: branches/events/app/views/blobs/suggestions.rhtml (3490 => 3491)
--- branches/events/app/views/blobs/suggestions.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/blobs/suggestions.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,6 @@
<% t "#{contributable_name(@version.id, 'Blob')} (#{h @blob.contributor_name})" -%>
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<h1>Suggestions</h1>
@@ -15,15 +15,7 @@
its purpose.</em></p>
<p>
- <textarea id='description_editor' name='description'></textarea>
- <script type="text/_javascript_">
- //<![CDATA[
- var oFCKeditor = new FCKeditor('description_editor', '600px', '300px', 'Simple');
- oFCKeditor.BasePath = "/_javascript_s/fckeditor/"
- oFCKeditor.Config['CustomConfigurationsPath'] = '/_javascript_s/fckcustom.js';
- oFCKeditor.ReplaceTextarea();
- //]]>
- </script>
+ <%= text_area_tag(:description, nil, :width => '600px', :height => '300px', :class => 'ckeditor') -%>
</p>
<% end %>
@@ -37,15 +29,7 @@
version.</p>
<p>
- <textarea id='revision_comments_editor' name='revision_comments'></textarea>
- <script type="text/_javascript_">
- //<![CDATA[
- var oFCKeditor = new FCKeditor('revision_comments_editor', '600px', '300px', 'Simple');
- oFCKeditor.BasePath = "/_javascript_s/fckeditor/"
- oFCKeditor.Config['CustomConfigurationsPath'] = '/_javascript_s/fckcustom.js';
- oFCKeditor.ReplaceTextarea();
- //]]>
- </script>
+ <%= text_area_tag(:revision_comments, nil, :width => '600px', :height => '200px', :class => 'ckeditor') -%>
</p>
<% end %>
Modified: branches/events/app/views/comments/_comments.rhtml (3490 => 3491)
--- branches/events/app/views/comments/_comments.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/comments/_comments.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<h2>
<%= icon "comments", nil, nil, { :style => "vertical-align: middle;" }, "" -%>
@@ -41,13 +41,13 @@
<% # Hack for FCKEditor: -%>
<% @comment = Comment.new; @comment.id = 0 -%>
- <% form_remote_tag(:url ="" rest_resource_uri(commentable) + "/comments",
- :before => fckeditor_before_js("comment", "comment"),
+ <% form_remote_tag(:url ="" polymorphic_path(commentable) + "/comments",
+ :before => 'for (instance in CKEDITOR.instances) { CKEDITOR.instances[instance].updateElement() }',
:update => 'commentsBox',
:loading => "Element.show('addcomment_indicator')",
- :complete => "Element.hide('addcomment_indicator'); new Effect.Highlight('comments', { duration: 1.5 }); $('comment').value = '';") do %>
+ :complete => "Element.hide('addcomment_indicator'); new Effect.Highlight('comments', { duration: 1.5 }); $('comment').value = ''; CKEDITOR.replace('comment_comment')") do %>
- <%= fckeditor_textarea("comment", "comment", :ajax => true, :toolbarSet => 'Basic', :width => '99%', :height => '200px') %>
+ <%= text_area_tag("comment[comment]", nil, :width => '99%', :height => '200px', :class => 'ckeditor') %>
<% if false %><textarea id="comment" name="comment" rows="10" style="width: 99%;"></textarea><% end %>
<br/>
<%= submit_tag "Submit Comment" %>
Modified: branches/events/app/views/content/_index.rhtml (3490 => 3491)
--- branches/events/app/views/content/_index.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/content/_index.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -3,7 +3,7 @@
<% if @pivot[:filters].length > 0 %>
<div class="category">Search filter terms</div>
<div class="search_filters">
- <form action="" url_for(request.query_parameters) -%>" method="GET">
+ <form action="" url_with_params(request.path, request.query_parameters) -%>" method="GET">
<div class="filter_search_box">
<input class="query" name="filter_query" value="<%= params[:filter_query] -%>" />
<% @pivot[:filter_query_url].each do |key, value| %>
@@ -11,7 +11,7 @@
<% end %>
<% if @pivot[:cancel_filter_query_url] %>
<%= link_to('<img src="" />',
- @pivot[:cancel_filter_query_url]) -%>
+ url_with_params(request.path, @pivot[:cancel_filter_query_url])) -%>
<% else %>
<input class="submit" type="image" src="" name="submit" />
<% end %>
@@ -32,8 +32,11 @@
<div class="options">
<% filter[:objects].each do |object| %>
<div title='<%= h(object[:plain_label]) -%>'<%= object[:selected] ? ' class="selected"' : '' -%>>
- <input class='checkbox' type='checkbox' <% if object[:selected] %> checked='checked' <% end %> />
- <%= link_to("<div class='count'>#{object[:count]}</div> <div class='label'><span class='truncate'>#{object[:label]}</span></div>", object[:label_uri]) -%>
+ <input class='checkbox' type='checkbox' <% if object[:selected] %> checked='checked' <% end %> />
+ <a href="" url_with_params(request.path, object[:label_uri]) -%>">
+ <div class='count'><%= object[:count] -%></div>
+ <div class='label'><span class='truncate'><%= object[:label] -%></span></div>
+ </a>
</div>
<% end %>
</div>
@@ -54,7 +57,7 @@
Sort by:
<select = this.options[this.selectedIndex].value;">
<% @pivot[:pivot_options]["order"].each do |args| %>
- <option value="<%= url_for(request.query_parameters.merge("order" => args["option"])) -%>"
+ <option value="<%= url_with_params(request.path, request.query_parameters.merge({:order => args["option"]})) -%>"
<% if params[:order] == args["option"] -%> selected="selected"<% end -%>><%= args["label"] -%></option>
<% end %>
</select>
@@ -64,18 +67,18 @@
</div>
<div class="summary">
<div class="result-count">
- Showing <%= pluralize(@pivot[:results].size, 'result') -%>.
+ Showing <%= pluralize(@pivot[:results].total_entries, 'result') -%>.
<% if @pivot[:results].size > 1 %>Use the <%if @pivot[:filters].length > 0 %>filters on the left and the <% end %>
search box below to refine the results.<% end %>
</div>
<div>
- <form action="" url_for(request.query_parameters) -%>" method="GET">
+ <form action="" url_with_params(request.path, request.query_parameters) -%>" method="GET">
<div class="search_box">
<input class="query" name="query" value="<%= params[:query] -%>" />
<% if request.query_parameters["filter"] %>
<input name="filter" type="hidden" value="<%= request.query_parameters["filter"].gsub('"', '"') -%>" />
<% end %>
- <input class="submit" type="submit" value="Search"></input>
+ <input class="submit" type="submit" value="Search"/>
</div>
<% if @pivot[:query_problem] %>
<div class="search_query_problem">
@@ -84,7 +87,7 @@
<% end %>
<% if params[:query] && controller.class != SearchController %>
<div class="remove_search_query">
- <%= link_to("Remove search query", url_for(request.query_parameters.merge({ "query", nil }))) -%>
+ <%= link_to("Remove search query", url_with_params(request.path, request.query_parameters.merge({ "query" => nil }))) -%>
</div>
<% end %>
</form>
Modified: branches/events/app/views/content_types/edit.rhtml (3490 => 3491)
--- branches/events/app/views/content_types/edit.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/content_types/edit.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,6 @@
<% t "Manage" -%>
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<h1>Manage Content Type: <%= h @content_type.title %></h1>
@@ -21,7 +21,7 @@
<strong>Description: </strong>
</p>
<center>
- <%= fckeditor_textarea(:content_type, :description, :toolbarSet => 'Simple', :width => '600px', :height => '300px') %>
+ <%= f.text_area(:description, :width => '600px', :height => '300px', :class => 'ckeditor') -%>
</center>
<br/>
Modified: branches/events/app/views/content_types/index.rhtml (3490 => 3491)
--- branches/events/app/views/content_types/index.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/content_types/index.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -10,25 +10,27 @@
<%= render :partial => "layouts/paginate", :locals => { :collection => @content_types } %>
- <center>
- <table class="simple">
- <thead>
- <tr>
- <td>Title</td>
- <td>Count</td>
- <td>Category</td>
- </tr>
- </thead>
- <tbody>
- <% @content_types.each do |ct| %>
+ <div style="clear: both">
+ <center>
+ <table class="simple">
+ <thead>
<tr>
- <td><%= link_to(h(ct.title), content_type_path(ct)) %></td>
- <td style="text-align: right"><%= Contribution.count(:conditions => ['content_type_id = ?', ct.id]) -%></td>
- <td><%= visible_name(ct.category) %></td>
- <% end %>
- </tbody>
- </table>
- </center>
+ <td>Title</td>
+ <td>Count</td>
+ <td>Category</td>
+ </tr>
+ </thead>
+ <tbody>
+ <% @content_types.each do |ct| %>
+ <tr>
+ <td><%= link_to(h(ct.title), content_type_path(ct)) %></td>
+ <td style="text-align: right"><%= Contribution.count(:conditions => ['content_type_id = ?', ct.id]) -%></td>
+ <td><%= visible_name(ct.category) %></td>
+ <% end %>
+ </tbody>
+ </table>
+ </center>
+ </div>
<ul>
</ul>
Modified: branches/events/app/views/contributions/_license_form.rhtml (3490 => 3491)
--- branches/events/app/views/contributions/_license_form.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/contributions/_license_form.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -35,8 +35,8 @@
<strong>What license do you want people to adhere to if they download and use this File?</strong>
</p>
<div style="padding-left: 1em;">
- <%= select(object, :license_id, [["No license", 0]] + License.find(:all).collect {|l| [l.title, l.id] },
- { :selected => @license ? @license.id : 0 },
+ <%= select(object, :license_id, [["No license", '']] + License.find(:all).collect {|l| [l.title, l.id] },
+ { :selected => @license ? @license.id : '' },
{ : remote_function(:update => 'license_info',
:url ="" {:controller => 'licenses', :action="" 'update_license_info' },
:with => "'license_id=' + escape(value)")}) %>
Modified: branches/events/app/views/contributions/_sharing_form.rhtml (3490 => 3491)
--- branches/events/app/views/contributions/_sharing_form.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/contributions/_sharing_form.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -6,6 +6,10 @@
<% perms = [] %>
<% perms = contributable.contribution.policy.permissions if edit %>
+<% applicable_networks = current_user.all_networks %>
+<% group_policies = current_user.group_policies %>
+<% using_group_policy = edit && contributable.contribution.policy.group_policy? %>
+<% group_policies = group_policies | [contributable.contribution.policy] if using_group_policy %>
<div class="fold">
@@ -22,29 +26,76 @@
</div>
<div class="foldContent" style="display: none;">
-
<div class="box_infotext">
- <p>
- Here you can specify who can <b>view</b> and <b>download</b> this <%= c_type %> on <%= Conf.sitename %>.
- </p>
-
- <% if update_perms -%>
- <p>
- You can also set <b>update</b> permissions for this <%= c_type %>.
- <%= link_to_function "Click here" + expand_image, visual_effect(:toggle_blind, "update_perms_info", :duration => 0.3) %> for more information.
- </p>
- <div id="update_perms_info" class="box_simple" style="display: none; margin: 0.5em 0;">
- <%= update_perms_info_text(contributable) -%>
- </div>
- <% end -%>
-
- <p>
- You can also explicitly share this <%= c_type %> with your Groups.
- </p>
- </div>
+ <p>
+ Here you can specify who can <b>view</b> and <b>download</b> this <%= c_type %> on <%= Conf.sitename %>.
+ </p>
+ <% if update_perms -%>
+ <p>
+ You can also set <b>update</b> permissions for this <%= c_type %>.
+ <%= link_to_function "Click here" + expand_image, visual_effect(:toggle_blind, "update_perms_info", :duration => 0.3) %> for more information.
+ </p>
+ <div id="update_perms_info" class="box_simple" style="display: none; margin: 0.5em 0;">
+ <%= update_perms_info_text(contributable) -%>
+ </div>
+ <% end -%>
+
+ <p>
+ You can also explicitly share this <%= c_type %> with your Groups.
+ </p>
+ </div>
+
+ <% if group_policies.size > 0 %>
+ <br/>
+ <div class="box_infotext">
+ <p>
+ One or more of your groups has a <strong>Group Policy</strong> defined.
+ A Group Policy is a pre-defined set of sharing rules that can be applied to this <%= c_type -%> instead of manually managing permissions.
+ </p>
+ <p>
+ Select whether you wish you use a Group Policy or manually manage permissions below.
+ </p>
+ </div>
+ <p><strong>How do you wish to manage the sharing rules for this <%= c_type -%>?</strong></p>
+ <div class="box_editing" style="padding-left: 1em; font-size: 93%;">
+ <p>
+ <input type="radio" name="policy_type" value="custom" id="policy_option_custom"
+ <%= 'checked="checked"' if !using_group_policy -%>
+ <label for="" permissions manually</label>
+ </p>
+
+ <p>
+ <input type="radio" name="policy_type" value="group" id="policy_option_group"
+ <%= 'checked="checked"' if using_group_policy -%>
+ <label for="" a Group Policy</label>
+ </p>
+ </div>
+ <% else %>
+ <input type="hidden" name="policy_type" value="custom"/>
+ <% end %>
+
<br/>
-
+
+ <div id="group_policy" <%= 'style="display: none"' if !using_group_policy-%>>
+ <p><strong>Which Group Policy do you wish to apply to this <%= c_type -%>?</strong></p>
+ <div class="box_editing" style="padding-left: 1em; font-size: 93%;">
+ <select name="group_policy">
+ <% group_policies.group_by {|p| p.contributor.title}.each do |network, policies| %>
+ <% unless policies.empty? %>
+ <optgroup label="<%= h network -%>">
+ <% policies.each do |policy| %>
+ <option value="<%= policy.id -%>"><%= policy.name -%></option>
+ <% end %>
+ </optgroup>
+ <% end %>
+ <% end %>
+ </select>
+ </div>
+ </div>
+
+ <div id="custom_policy" <%= 'style="display: none"' if using_group_policy-%>>
+
<!-- View/Download Permissions -->
<p><strong>Who can view and download this <%= c_type %> on <%= Conf.sitename %>?</strong></p>
@@ -141,7 +192,7 @@
<br/>
- <% unless (applicable_networks = (current_user.networks + current_user.networks_owned)).empty? %>
+ <% unless applicable_networks.empty? %>
<!-- Explicit Group Permissions -->
<p><strong>Share with my Groups:</strong></p>
@@ -174,9 +225,9 @@
visiting the 'edit' page.
</p>
</div>
- <% selected_option = (Conf.layouts[contributable.contribution.layout]["network_id"] unless
- (contributable.contribution.nil? || contributable.contribution.layout.nil? ||
- Conf.layouts[contributable.contribution.layout].nil?)) %>
+ <% selected_option = (Conf.layouts[contributable.contribution.policy.layout]["network_id"] unless
+ (contributable.contribution.nil? || contributable.contribution.policy.nil? ||
+ contributable.contribution.policy.layout.nil? || Conf.layouts[contributable.contribution.policy.layout].nil?)) %>
<%= select_tag "layout", "<option value="">Default</option>" +
options_from_collection_for_select(applicable_networks.select {|n| n.layout_name if Conf.layouts[n.layout_name]},
'id','title', selected_option) %>
@@ -184,6 +235,8 @@
<% end %>
</div>
<% end %>
+
+ </div>
</div>
</div>
Modified: branches/events/app/views/experiments/edit.rhtml (3490 => 3491)
--- branches/events/app/views/experiments/edit.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/experiments/edit.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<h1>Edit Experiment</h1>
@@ -11,7 +11,7 @@
<%= form.text_field :title, :size => 86 %>
<p><b>Description</b></p>
- <%= fckeditor_textarea(:experiment, :description, :toolbarSet => 'Simple', :width => '550px', :height => '300px') %>
+ <%= form.text_area(:description, :width => '550px', :height => '300px', :class => 'ckeditor') -%>
<br/>
Modified: branches/events/app/views/experiments/new.rhtml (3490 => 3491)
--- branches/events/app/views/experiments/new.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/experiments/new.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<h1>New Experiment</h1>
@@ -11,7 +11,7 @@
<%= form.text_field :title, :size => 86 %>
<p><b>Description</b></p>
- <%= fckeditor_textarea(:experiment, :description, :toolbarSet => 'Simple', :width => '550px', :height => '300px') %>
+ <%= form.text_area(:description, :width => '550px', :height => '300px', :class => 'ckeditor') -%>
<br/>
Modified: branches/events/app/views/feedback/index.rhtml (3490 => 3491)
--- branches/events/app/views/feedback/index.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/feedback/index.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -43,7 +43,7 @@
<%= text_field_tag :email, (logged_in? && current_user.email) ? current_user.email : params[:email], :size => 30 %>
<p><b>Subject</b></p>
- <%= text_field_tag :subject, params[:subject], :size => 60 %>
+ <%= text_field_tag :subject, params[:subject], :style => "width: 400px" %>
<p><b>Message</b></p>
<textarea id="feedback_content" name="content" rows="8" style="width: 400px;"><%= params[:content] %></textarea><br/>
Modified: branches/events/app/views/gadgets/_asset_manager.rhtml (3490 => 3491)
--- branches/events/app/views/gadgets/_asset_manager.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/gadgets/_asset_manager.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -8,7 +8,7 @@
<li><%= link_to(pluralize(current_user.friends.length, "Friend"), currentusers_things_url('friends')) %></li>
<li><%= link_to(pluralize(current_user.networks_owned.length + current_user.networks.length, "Group"), currentusers_things_url('groups')) %></li>
<% filter_contributables(current_user.contributions).each do |klass,contributables| %>
- <li><%= link_to(pluralize(contributables.length, controller_visible_name(klass.humanize.pluralize)), currentusers_things_url(controller_visible_name(klass.humanize.pluralize).downcase)) %></li>
+ <li><%= link_to(pluralize(contributables.length, controller_visible_name(klass.humanize.pluralize).singularize), currentusers_things_url(klass)) %></li>
<% end %>
</ul>
</div>
@@ -51,7 +51,7 @@
<% filter_contributables(current_user.contributions, true).each do |klass, array| %>
<div>
<div class="title">
- <%= link_to(visible_name(klass.humanize).pluralize, currentusers_things_url(controller_visible_name(klass.humanize.pluralize).downcase)) %>
+ <%= link_to(visible_name(klass.humanize).pluralize, currentusers_things_url(klass)) %>
</div>
<div class="content">
<ul class="gadget_list">
Modified: branches/events/app/views/group_announcements/_form.rhtml (3490 => 3491)
--- branches/events/app/views/group_announcements/_form.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/group_announcements/_form.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<%= error_messages_for 'announcement' %>
@@ -10,7 +10,7 @@
<p>
<label for="" @announcement.nil? ? "" : @announcement.id -%>_body_editor"><b>Body</b></label><br/>
- <center><%= fckeditor_textarea(:announcement, :body, :toolbarSet => 'Simple', :width => '535px', :height => '300px') %></center>
+ <center><%= form.text_area(:body, :width => '535px', :height => '300px', :class => 'ckeditor') -%></center>
<br/>
<label for=""
<%= check_box "announcement", "public", :style => "margin-right: 0.3em;" -%>Make this announcement public
Modified: branches/events/app/views/jobs/new.rhtml (3490 => 3491)
--- branches/events/app/views/jobs/new.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/jobs/new.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" -%>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<h1>New Job</h1>
@@ -54,7 +54,7 @@
<%= form.text_field :title, :size => 86 %>
<p><b>Description</b></p>
- <%= fckeditor_textarea(:job, :description, :toolbarSet => 'Simple', :width => '550px', :height => '300px') %>
+ <%= form.text_area(:description, :width => '550px', :height => '300px', :class => 'ckeditor') -%>
<br/>
Deleted: branches/events/app/views/layouts/_biovel.rhtml (3490 => 3491)
--- branches/events/app/views/layouts/_biovel.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/layouts/_biovel.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,26 +0,0 @@
-<% @logo_link_url = "http://biovel.eu/" # The URL that the logo links to when clicked
- @logo_image_url = "/images/biovel.png" # The logo image %>
-
-<% content_for :site_info_links do %>
-
-<% end %>
-
-<% content_for :logo do %>
- <div style="float: left; margin-bottom: 0.5em">
- <%= link_to image_tag(@logo_image_url), @logo_link_url, :style => "float: left" -%>
- <div style="float: left; margin-top: 1em; margin-left: 1em">
- <div style="font-weight: bold; vertical-align: middle">
- <a href="" @logo_link_url -%>" class="biovel_logo_link">
- <span style="font-size: 280%"><span style="color:black;">B</span>io<span style="color:black">V</span>e<span style="color:black">L</span></span><br/>
- <span style="font-size: 100%">Biodiversity Virtual e-Laboratory</span>
- </a>
- </div>
- <div style="margin: 0.5em 0 0 1em; color: black;">
- on <%= link_to image_tag("/images/logo_tiny.png", :style=>"-moz-border-radius: 2px; border-radius: 2px; vertical-align: middle;border: 1px solid #ccc"), "/" -%>
- </div>
- </div>
- </div>
- <br class="clearer"/>
-<% end %>
-
-<%= render :partial => "layouts/myexperiment" %>
Modified: branches/events/app/views/layouts/_breadcrumbs_bar.rhtml (3490 => 3491)
--- branches/events/app/views/layouts/_breadcrumbs_bar.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/layouts/_breadcrumbs_bar.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -3,7 +3,8 @@
<td>
<ul class="breadcrumb_list">
<li><%= link_to "Home", home_url %></li>
- <%= render :partial => "breadcrumbs" %>
+ <% # no better way to check for breadcrumbs partial... %>
+ <%= render :partial => "breadcrumbs" rescue nil %>
</ul>
</td>
<td style="text-align: right; padding-left: 1em;">
Deleted: branches/events/app/views/layouts/_elico.rhtml (3490 => 3491)
--- branches/events/app/views/layouts/_elico.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/layouts/_elico.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,49 +0,0 @@
-<%# Defines a new header, then calls main myExperiment layout %>
-
-<% content_for :header do %>
-</div>
-
-<div id="elico_header">
- <div class="logo">
- <div style="float: left; margin-bottom: 0.5em">
- <img src="" style="float: left; vertical-align: middle; width: 60px; height: 60px"/>
- <div style="float: left; margin-top: 1em; margin-left: 1em">
- <div style="font-size: 220%; font-weight: bold; vertical-align: middle">Data Mining Portal</div>
- <div style="margin: 0.5em 0 0 1em">
- on <%= link_to image_tag("/images/logo_tiny.png", :style=>"-moz-border-radius: 2px; border-radius: 2px; vertical-align: middle;border: 1px solid white"), "/" -%>
- </div>
- </div>
- </div>
- <div style="float: right; font-size: 120%; margin-top: 1.5em">
- e-Laboratory for Interdisciplinary Collaborative Data Mining
- </div>
- <br class="clearer"/>
- </div>
- <div id="elico_links_bar">
- <div id="inner">
- <div style="float: left;" class="links">
- <%= link_to "About", "http://www.e-lico.eu/?q=node/4", :target => '_blank' %> |
- <%= link_to "Mailing List", "http://lists.e-lico.eu/mailman/listinfo/dm-myexperiment", :target => '_blank' %> |
- <%= link_to "Publications", "http://www.e-lico.eu/?q=publications", :target => '_blank' %>
- </div>
- <div style="float: right;" class="links">
- <%= render :partial => 'layouts/user_links' %>
- </div>
- <br class="clearer"/>
- </div>
- </div>
-</div>
-
-<div id="doc2" class="yui-t4" style="*overflow: visible; *height: auto">
- <div id="hd">
- <div id="myexp_tabs">
- <%= render :partial => 'layouts/tab_bar' %>
- </div>
- <div id="myexp_searchbar">
- <%= render :partial => "layouts/search" %>
- </div>
- </div>
-<% end %>
-
-<%# TODO: In rails 2, this can possibly be removed, and the layout specified when rendering the partial in application.rhtml %>
-<%= render :partial => "layouts/myexperiment" %>
Copied: branches/events/app/views/layouts/_myexperiment.html.erb (from rev 3490, trunk/app/views/layouts/_myexperiment.html.erb) (0 => 3491)
--- branches/events/app/views/layouts/_myexperiment.html.erb (rev 0)
+++ branches/events/app/views/layouts/_myexperiment.html.erb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
+ <%= t :site => "#{Conf.sitename} - #{controller_visible_name(controller.controller_name.humanize)}", :separator => "-" %>
+ <% if @lod_rdf %><link rel="alternate" href="" @lod_rdf -%>" type="application/rdf+xml" title="RDF+XML" /><% end %>
+ <% if @lod_xml %><link rel="alternate" href="" @lod_xml -%>" type="application/xml" title="REST XML" /><% end %>
+ <link rel="shortcut icon" href="" type="image/x-icon"/>
+ <%= stylesheet_link_tag 'reset-fonts-grids', 'base-min', 'acts_as_taggable_stylesheet',
+ 'star_rating', 'gadgets', 'misc_skinning', address@hidden"stylesheets"] %>
+ <%= _javascript__include_tag :defaults, "boxover.js", "tabs.js", "folds.js" %>
+
+ <% if controller.action_name.downcase == "timeline" %>
+ <script src="" type="text/_javascript_"></script>
+ <% end -%>
+
+ <%= render :partial => "layouts/feed_link_tags" %>
+
+ <%= yield :head_options -%>
+</head>
+<body>
+
+<%= render :partial => "layouts/integrations/#{session[:came_from]}" unless session[:came_from].blank? %>
+
+<div id="doc2" class="yui-t4">
+
+ <% if @content_for_header %>
+ <%= yield :header %>
+ <% else %>
+ <div id="hd">
+ <div id="myexp_header">
+ <div class="logo">
+ <% if @content_for_logo %>
+ <%= yield :logo %>
+ <% else %>
+ <%= link_to image_tag(Conf.site_logo), "/" %>
+ <% end %>
+ </div>
+ <div id="myexp_links">
+ <div id="site_info_links" class="links">
+ <% if @content_for_site_info_links %>
+ <%= yield :site_info_links %>
+ <% else %>
+ <%= render :partial => 'layouts/site_info_links' %>
+ <% end %>
+ </div>
+ <div id="user_links" class="links">
+ <%= render :partial => 'layouts/user_links' %>
+ </div>
+ </div>
+ </div>
+ <div id="myexp_tabs">
+ <% if @content_for_tabs %>
+ <%= yield :tabs %>
+ <% else %>
+ <%= render :partial => 'layouts/tab_bar' %>
+ <% end %>
+ </div>
+ <div id="myexp_searchbar">
+ <%= render :partial => "layouts/search" %>
+ </div>
+ </div>
+ <% end %>
+
+
+ <% if @content_for_body %>
+ <%= yield :body %>
+ <% else %>
+ <div id="bd">
+ <div id="yui-main">
+ <div class="yui-b">
+ <div id="myexp_breadcrumbs_bar">
+ <%= render :partial => "layouts/breadcrumbs_bar" %>
+ </div>
+ <div id="myexp_content">
+ <%= render :partial => 'layouts/alerts' %>
+
+ <%= yield :layout %>
+
+ </div>
+ </div>
+ </div>
+ <div id="myexp_sidebar" class="yui-b">
+ <%= render :partial => "layouts/sidebar" %>
+ </div>
+ </div>
+ <% end %>
+
+
+ <% if @content_for_footer %>
+ <%= yield :footer %>
+ <% else %>
+ <% cache(:controller => 'global_cache', :action ="" 'footer') do -%>
+ <div id="ft">
+ <%= render :partial => "layouts/footer" %>
+ </div>
+ <br class="clearer"/>
+ <% end -%>
+ <% end %>
+
+
+ <%= render :partial => "layouts/debug" if Conf.show_debug %>
+</div>
+
+<%= render :partial => "layouts/web_analytics" if Conf.google_web_analytics["enable"] %>
+
+<% if @content_for_analytics %>
+ <%= yield :analytics %>
+<% end %>
+
+</body>
+</html>
Deleted: branches/events/app/views/layouts/_myexperiment.rhtml (3490 => 3491)
--- branches/events/app/views/layouts/_myexperiment.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/layouts/_myexperiment.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,109 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
- <%= t :site => "#{Conf.sitename} - #{controller_visible_name(controller.controller_name.humanize)}", :separator => "-" %>
- <% if @lod_rdf %><link rel="alternate" href="" @lod_rdf -%>" type="application/rdf+xml" title="RDF+XML" /><% end %>
- <% if @lod_xml %><link rel="alternate" href="" @lod_xml -%>" type="application/xml" title="REST XML" /><% end %>
- <link rel="shortcut icon" href="" type="image/x-icon"/>
- <%= stylesheet_link_tag 'reset-fonts-grids', 'base-min', 'acts_as_taggable_stylesheet', 'star_rating', 'gadgets', address@hidden"stylesheets"] %>
- <%= _javascript__include_tag :defaults, "boxover.js" %>
-
- <% if controller.action_name.downcase == "timeline" %>
- <script src="" type="text/_javascript_"></script>
- <% end -%>
-
- <%= render :partial => "layouts/feed_link_tags" %>
-
- <%= yield :head_options -%>
-</head>
-<body>
-
-<%= render :partial => "layouts/integrations/#{session[:came_from]}" unless session[:came_from].blank? %>
-
-<div id="doc2" class="yui-t4">
-
- <% if @content_for_header %>
- <%= yield :header %>
- <% else %>
- <div id="hd">
- <div id="myexp_header">
- <div class="logo">
- <% if @content_for_logo %>
- <%= yield :logo %>
- <% else %>
- <%= link_to image_tag(Conf.site_logo), "/" %>
- <% end %>
- </div>
- <div id="myexp_links">
- <div style="text-align: left; float: left;" id="site_info_links" class="links">
- <% if @content_for_site_info_links %>
- <%= yield :site_info_links %>
- <% else %>
- <%= render :partial => 'layouts/site_info_links' %>
- <% end %>
- </div>
- <div style="text-align: right; float: right;" id="user_links" class="links">
- <%= render :partial => 'layouts/user_links' %>
- </div>
- </div>
- <div class="clearer"> </div>
- </div>
- <div id="myexp_tabs">
- <%= render :partial => 'layouts/tab_bar' %>
- </div>
- <div id="myexp_searchbar">
- <%= render :partial => "layouts/search" %>
- </div>
- </div>
- <% end %>
-
-
- <% if @content_for_body %>
- <%= yield :body %>
- <% else %>
- <div id="bd">
- <div id="yui-main">
- <div class="yui-b">
- <div id="myexp_breadcrumbs_bar">
- <%= render :partial => "layouts/breadcrumbs_bar" %>
- </div>
- <div id="myexp_content">
- <%= render :partial => 'layouts/alerts' %>
-
- <%= yield :layout %>
-
- </div>
- </div>
- </div>
- <div id="myexp_sidebar" class="yui-b">
- <%= render :partial => "layouts/sidebar" %>
- </div>
- </div>
- <% end %>
-
-
- <% if @content_for_footer %>
- <%= yield :footer %>
- <% else %>
- <% cache(:controller => 'global_cache', :action ="" 'footer') do -%>
- <div id="ft">
- <%= render :partial => "layouts/footer" %>
- </div>
- <br class="clearer"/>
- <% end -%>
- <% end %>
-
-
- <%= render :partial => "layouts/debug" if Conf.show_debug %>
-</div>
-
-<%= _javascript__include_tag "tabs.js" %>
-<%= _javascript__include_tag "folds.js" %>
-
-<%= render :partial => "layouts/web_analytics" if Conf.google_web_analytics["enable"] %>
-
-</body>
-</html>
Modified: branches/events/app/views/layouts/_paginate.rhtml (3490 => 3491)
--- branches/events/app/views/layouts/_paginate.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/layouts/_paginate.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,3 +1,5 @@
+<%= stylesheet_link_tag "pagination" %>
+
<% if local_assigns[:sort_by] %>
<div style="float: right; margin: 1em;">
Sort by:
@@ -20,37 +22,7 @@
</div>
<% end %>
-<% if collection.page_count != collection.first_page -%>
-<div class="pagination">
-
- <ul>
- <% if collection.previous_page? -%>
- <li class="nextpage">
- <%= link_to('« previous', request.query_parameters.merge("page" => collection.previous_page)) %>
- </li>
- <% else -%>
- <li class="disabledpage">« previous</li>
- <% end -%>
-
- <% last_page = 0 -%>
- <% windowed_pagination_links(collection, :window_size => 2, :link_to_current_page => true, :always_show_anchors => true) do |n| -%>
- <% if collection.page == n -%>
- <li class="currentpage"><%= n %></li>
- <% else -%>
- <li><%= "..." if last_page+1 < n %>
- <%= link_to(n, request.query_parameters.merge("page" => n)) %>
- </li>
- <% end -%>
- <% last_page = n -%>
- <% end -%>
-
- <% if collection.next_page? -%>
- <li class="nextpage">
- <%= link_to('next »', request.query_parameters.merge("page" => collection.next_page)) %>
- </li>
- <% else -%>
- <li class="disabledpage">next »</li>
- <% end -%>
- </ul>
+<div class="digg_pagination" style="text-align: center">
+ <%= will_paginate(collection, :outer_window => 0, :inner_window => 2) -%>
</div>
-<% end -%>
+
Deleted: branches/events/app/views/layouts/_scape.html.erb (3490 => 3491)
--- branches/events/app/views/layouts/_scape.html.erb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/layouts/_scape.html.erb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,9 +0,0 @@
-<% @logo_link_url = "http://www.scape-project.eu/" # The URL that the logo links to when clicked
- @logo_image_url = "/images/scape_logo.png" # The logo image %>
-
-<% content_for :site_info_links do %>
- <a target="_blank" href="" SCAPE</a> |
- <a target="_blank" href="" Wiki</a>
-<% end %>
-
-<%= render :partial => "layouts/skin_template" %>
Copied: branches/events/app/views/layouts/application.html.erb (from rev 3490, trunk/app/views/layouts/application.html.erb) (0 => 3491)
--- branches/events/app/views/layouts/application.html.erb (rev 0)
+++ branches/events/app/views/layouts/application.html.erb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1 @@
+<%= render :partial => Conf.page_template %>
Deleted: branches/events/app/views/layouts/application.rhtml (3490 => 3491)
--- branches/events/app/views/layouts/application.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/layouts/application.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,2 +0,0 @@
-<% configure_layout %>
-<%= render :partial => @layout["layout"] %>
\ No newline at end of file
Copied: branches/events/app/views/layouts/integrations/_statjr.html.erb (from rev 3490, trunk/app/views/layouts/integrations/_statjr.html.erb) ( => )
Modified: branches/events/app/views/licenses/_form.rhtml
===================================================================
--- branches/events/app/views/licenses/_form.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/licenses/_form.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<%= _javascript__include_tag 'license_attributes' %>
<!--[form:license]-->
@@ -15,7 +15,7 @@
<%= render :partial => "license_attributes/attributes_form", :locals => { :edit => true, :license => @license } %>
<h2><label for=""
-<%= fckeditor_textarea(:license, :description, :toolbarSet => 'Simple', :width => '700px', :height => '300px') %></p>
+<%= form.text_area :description, :width => '700px', :height => '300px', :class => 'ckeditor' -%></p>
<br/><br/>
<!--[eoform:license]-->
Modified: branches/events/app/views/memberships/_table.rhtml (3490 => 3491)
--- branches/events/app/views/memberships/_table.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/memberships/_table.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -39,11 +39,15 @@
<% end %>
<% if membership.accepted? %>
<% if membership.network.administrator?(membership.user_id) %>
- <%= icon "remove_group_admin", user_membership_path(membership.user_id, membership)+'?membership[administrator]=0', nil, {:method => :put}, "Remove group admin status" %>
- <% else %>
- <%= icon "make_group_admin", user_membership_path(membership.user_id, membership)+'?membership[administrator]=1', nil, {:method => :put}, "Add
-group admin status" %>
- <% end %>
+ <%= icon "remove_group_admin", user_membership_path(membership.user_id, membership)+'?membership[administrator]=0', nil, {:method => :put}, "Remove group admin status" %>
+ <% if membership.network.owner == current_user %>
+ <%= icon "transfer_ownership", network_path(membership.network, :network => {:user_id => membership.user_id}),
+ nil, {:method => :put, :confirm => "Are you sure you wish to transfer ownership of this group? You will not be able to undo this action."},
+ "Transfer ownership" %>
+ <% end %>
+ <% else %>
+ <%= icon "make_group_admin", user_membership_path(membership.user_id, membership)+'?membership[administrator]=1', nil, {:method => :put}, "Add group admin status" %>
+ <% end %>
<% end %>
</td>
</tr>
Modified: branches/events/app/views/networks/_breadcrumbs.rhtml (3490 => 3491)
--- branches/events/app/views/networks/_breadcrumbs.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/networks/_breadcrumbs.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,8 +1,15 @@
-<li><%= link_to 'Groups', networks_path -%></li>
+<% if controller.action_name == 'index' %>
+ <li>Groups</li>
+<% else %>
+ <li><%= link_to 'Groups', networks_path %></li>
+<% end %>
-<% if ["show", "new", "edit", "search", "all", "invite"].include? controller.action_name.to_s -%>
+<% if ["show", "content", "new", "edit", "search", "all", "invite"].include? controller.action_name.to_s -%>
<% case controller.action_name.to_s; when "show" %>
<li><%= h(@network.title) -%></li>
+ <% when "content" %>
+ <li><%= link_to "#{h(@network.title)}", network_path(@network) %></li>
+ <li>Content</li>
<% when "new" %>
<li>New Group</li>
<% when "edit" %>
Modified: branches/events/app/views/networks/_form.rhtml (3490 => 3491)
--- branches/events/app/views/networks/_form.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/networks/_form.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
- <%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+ <%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<p>
<b>Owner</b><br />
@@ -43,6 +43,6 @@
<p>
<strong>Description: </strong>
</p>
- <%= fckeditor_textarea(:network, :description, :toolbarSet => 'Simple', :width => '700px', :height => '300px') %>
+ <%= form.text_area(:description, :width => '700px', :height => '300px', :class => 'ckeditor') %>
Modified: branches/events/app/views/networks/_members.rhtml (3490 => 3491)
--- branches/events/app/views/networks/_members.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/networks/_members.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,16 +1,17 @@
<% size ||= 100 -%>
+<% limit ||= nil %>
<% unless collection.empty? %>
+ <% orig_collection = collection %>
+ <% collection = collection[0...limit] if limit %>
+ <div id="hlist">
+ <ul id="members">
+ <% collection.each do |member| %>
+ <%= render :partial => "networks/member", :locals => { :member => member, :size => size } %>
+ <% end %>
+ </ul>
+ <%= "+ #{orig_collection.size - limit} others" if limit && orig_collection.size > limit %>
+ </div>
-<div id="hlist">
- <ul id="members">
- <% unless collection.empty? %>
- <% for member in collection %>
- <%= render :partial => "networks/member", :locals => { :member => member, :size => size } %>
- <% end %>
- <% end %>
- </ul>
-</div>
+ <div class="clearer"> </div>
-<div class="clearer"> </div>
-
<% end %>
\ No newline at end of file
Modified: branches/events/app/views/networks/_table.rhtml (3490 => 3491)
--- branches/events/app/views/networks/_table.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/networks/_table.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,89 +1,91 @@
<% query ||= false -%>
-<% odd_row = false -%>
-<% unless collection.empty? -%>
- <table class="alt_table">
- <% for network in collection -%>
- <tr class="<%= (odd_row = !odd_row) ? "odd_row" : "even_row" %>">
- <td style="width: 120px;">
- <p style="margin-top:0; padding-top:0; text-align: center;"><b>Owner:</b></p>
- <center><%= contributor(network.user_id, "User", true, 80) %></center>
- </td>
- <td style="text-align: left;">
- <p class="title">
- <% if (current_user != 0) && (network.user_id == current_user.id) %>
- <%= icon "network-owned", nil, nil, nil, '' %>
- <% else %>
- <%= icon "network-member", nil, nil, nil, '' %>
- <% end %>
- <%=link_to(query ? highlight_all(h(network.title), query) : h(network.title), network_path(network)) %>
- </p>
- <% cache(:controller => 'groups_cache', :action ="" 'listing', :id => network.id) do -%>
- <p style="font-size: 85%;">
- <% if network.unique_name and network.unique_name.length > 0 %>
- <b>Unique name: </b><%=h network.unique_name -%>
- <% end %>
- <b>Created: </b><%=datetime network.created_at, true -%>
- </p>
-
- <div class="desc">
- <div style="font-size: 85%;">
- <% if network.description and network.description.length > 0 -%>
- <% desc = truncate(strip_html(network.description), :length => 400) -%>
- <%= query ? highlight_all(desc, query) : desc -%>
- <% else -%>
- <span class="none_text">No description</span>
- <% end -%>
- </div>
- </div>
-
- <p class="standout" style="margin-top: 0.4em;">
- <%= pluralize network.shared_contributions.length, "shared item" -%>
- |
- <% # both private & public announcements -%>
- <%= pluralize network.announcements.length, "announcements" -%>
- </p>
-
- <% unless network.members.empty? -%>
- <div class="desc" style="margin-top: 0.4em;">
- <p style="font-size: 85%;"><b>Members (<%= network.members.length %>):</b></p>
- <div style="font-size: 77%;"><%= render :partial => "networks/members", :locals => { :collection => network.members(true), :size => 40 } %></div>
- </div>
- <% end -%>
-
- <% unless (tags = network.tags).empty? -%>
- <a href="" network_path(network) + '#tags' -%>"><p style="font-size: 85%;"><b>Tags:</b></p></a>
- <div style="display:inline;" class="tags_onesize"><%= tag_cloud_from_collection tags, true %></div>
- <% else -%>
- <p style="font-size: 85%;"><i>This Group has not been tagged yet!</i></p>
- <% end -%>
- <% end -%>
- <% latest_announcement = network.announcements_for_user(current_user).first -%>
- <% unless latest_announcement.nil? -%>
- <p style="font-size: 85%; margin-top: 0.7em;">
- <b>Latest announcement:</b>:
- <%= link_to latest_announcement.title, group_announcement_path(network, latest_announcement) -%>
- </p>
- <% end -%>
- </td>
- <td class="actions">
- <%= icon "show", network_path(network), nil, nil, "View" %>
- <% if mine? network -%>
- <%= icon "manage", edit_network_path(network) %>
- <% elsif logged_in? %> <!-- admins can't leave the group or request membership! -->
- <% if network.member?(current_user.id) %>
- <!-- user is not an admin, but a member already -->
- <% cur_membership = Membership.find(:first, :conditions => ["network_id = ? AND user_id = ?", network.id, current_user.id] ) %>
- <% if cur_membership %>
- <%= icon('network-leave', user_membership_path(cur_membership.user_id, cur_membership) + "?return_to=" + networks_path, nil, { :confirm => "Are you sure want to leave this group?", :method => :delete }, 'Leave Group') %>
- <% end %>
- <% elsif !current_user.membership_pending?(network.id) && !network.invitation_only? %>
- <!-- not an admin, not a member yet and hasn't got pending request -->
- <%= request_membership_link(current_user.id, network.id) %>
- <% end %>
- <% end -%>
- </td>
- </tr>
- <% end -%>
- </table>
- <br/>
-<% end -%>
+
+<% collection.each do |network| -%>
+
+ <div class="resource_list_item">
+
+ <div class="avatar_panel" style="width: 7em">
+ <span class="owner">Owner</span>
+ <%= contributor(network.user_id, "User", true, 80) %>
+ </div>
+
+ <div class="main_panel" style="margin-left: 7.5em">
+
+ <div class="actions">
+ <%= icon "show", network_path(network), nil, nil, "View" %>
+ <% if mine? network -%>
+ <%= icon "manage", edit_network_path(network) %>
+ <% elsif logged_in? %> <!-- admins can't leave the group or request membership! -->
+ <% if network.member?(current_user.id) %>
+ <!-- user is not an admin, but a member already -->
+ <% cur_membership = Membership.find(:first, :conditions => ["network_id = ? AND user_id = ?", network.id, current_user.id] ) %>
+ <% if cur_membership %>
+ <%= icon('network-leave', user_membership_path(cur_membership.user_id, cur_membership) + "?return_to=" + networks_path, nil, { :confirm => "Are you sure want to leave this group?", :method => :delete }, 'Leave Group') %>
+ <% end %>
+ <% elsif !current_user.membership_pending?(network.id) && !network.invitation_only? %>
+ <!-- not an admin, not a member yet and hasn't got pending request -->
+ <%= request_membership_link(current_user.id, network.id) %>
+ <% end %>
+ <% end -%>
+ </div>
+
+ <p class="title">
+ <% if (current_user != 0) && (network.user_id == current_user.id) %>
+ <%= icon "network-owned", nil, nil, nil, '' %>
+ <% else %>
+ <%= icon "network-member", nil, nil, nil, '' %>
+ <% end %>
+ <% truncated_title = truncate(network.title, :length => 45) %>
+ <%=link_to(query ? highlight_all(truncated_title, query) : truncated_title, network_path(network),
+ :title => network.title) %>
+ </p>
+
+ <% cache(:controller => 'groups_cache', :action ="" 'listing', :id => network.id) do -%>
+ <p>
+ <% if network.unique_name and network.unique_name.length > 0 %>
+ <b>Unique name: </b><%=h network.unique_name -%>
+ <% end %>
+ <br/>
+ <b>Created: </b><%=datetime network.created_at, true -%>
+ </p>
+
+ <div class="desc">
+ <% if network.description and network.description.length > 0 -%>
+ <% desc = truncate(strip_html(network.description), :length => 400) -%>
+ <%= query ? highlight_all(desc, query) : desc -%>
+ <% else -%>
+ <span class="none_text">No description</span>
+ <% end -%>
+ </div>
+
+ <p class="standout">
+ <%= pluralize network.shared_contributions.length, "shared item" -%>
+ |
+ <% # both private & public announcements -%>
+ <%= pluralize network.announcements.length, "announcements" -%>
+ </p>
+
+ <% unless network.members.empty? -%>
+ <div class="desc">
+ <p><b>Members (<%= network.members.length %>):</b></p>
+ <div style="font-size: 77%;"><%= render :partial => "networks/members", :locals => { :collection => network.members(true), :size => 40, :limit => 6 } %></div>
+ </div>
+ <% end -%>
+
+ <% unless (tags = network.tags).empty? -%>
+ <a href="" network_path(network) + '#tags' -%>"><p style="font-size: 85%;"><b>Tags:</b></p></a>
+ <div style="display:inline;" class="tags_onesize"><%= tag_cloud_from_collection tags, true %></div>
+ <% else -%>
+ <p><i>This Group has not been tagged yet!</i></p>
+ <% end -%>
+ <% end -%>
+ <% latest_announcement = network.announcements_for_user(current_user).first -%>
+ <% unless latest_announcement.nil? -%>
+ <p style="margin-top: 0.7em;">
+ <b>Latest announcement:</b>:
+ <%= link_to latest_announcement.title, group_announcement_path(network, latest_announcement) -%>
+ </p>
+ <% end -%>
+ </div>
+ </div>
+<% end %>
Copied: branches/events/app/views/networks/content.rhtml (from rev 3490, trunk/app/views/networks/content.rhtml) (0 => 3491)
--- branches/events/app/views/networks/content.rhtml (rev 0)
+++ branches/events/app/views/networks/content.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,4 @@
+<h1>Content from the <%=h @network.title -%> group</h1>
+
+<%= render :partial => "content/index" -%>
+
Modified: branches/events/app/views/networks/show.rhtml (3490 => 3491)
--- branches/events/app/views/networks/show.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/networks/show.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,7 @@
<% t "#{h @network.title}" -%>
-<% if logged_in? %>
+<ul class="sectionIcons">
+ <% if logged_in? %>
<% if current_user.membership_request_pending?(@network.id) %>
<div class="box_standout">
<span style="text-align: left;"><b>You have already sent a membership request to join this group. Awaiting admin confirmation.</b></span>
@@ -11,11 +12,10 @@
</div>
<% end %>
- <ul class="sectionIcons">
<% unless mine? @network %>
<% if @network.member? current_user.id %>
<% cur_membership = Membership.find(:first, :conditions => ["network_id = ? AND user_id = ?", @network.id, current_user.id] ) %>
- <% if cur_membership %>
+ <% if false %>
<li><%= icon('network-leave', user_membership_path(cur_membership.user_id, cur_membership), nil, { :confirm => "Are you sure want to leave this group?", :method => :delete }, 'Leave Group') %></li>
<% end %>
<% elsif !current_user.membership_pending?(@network.id) && address@hidden %>
@@ -26,13 +26,17 @@
<% if @network.administrator?(current_user.id) %>
<li><%= icon('announcement', new_group_announcement_path(@network), 'Make a new Group Announcement', nil, 'Make a Group Announcement') -%></li>
<li><%= icon('network-invite', invite_network_path(@network), 'Invite People', nil, 'Invite People') -%></li>
+ <li><%= icon('policy', network_policies_path(@network), 'Group Policies', nil, 'Group Policies') -%></li>
<% end %>
<% if mine? @network %>
<li><%= icon('edit', edit_network_path(@network), 'Edit', nil, 'Edit Group') %></li>
+ <% end %>
+ <% if mine?(@network) || current_user.admin? %>
<li><%= icon('destroy', network_path(@network), 'Delete Group', { :confirm => 'Are you sure?', :method => :delete }, 'Delete Group') %></li>
<% end %>
- </ul>
-<% end %>
+ <% end %>
+ <li><%= icon('content', content_network_path(@network), 'View Group Content', nil, 'View Group Content') %></li>
+</ul>
<h1>
Group: <%=h @network.title %>
@@ -44,7 +48,7 @@
|
<a href=""
|
- <a href="" Items (<%= @shared_items.length -%>)</a>
+ <%= link_to("Shared Items", content_network_path(@network)) -%>
|
<a href="" (<%= @network.creditations.length -%>)</a>
|
@@ -68,130 +72,103 @@
|
</div>
-<div class="contribution_left_box">
-
- <div class="box_simple" style="margin: 0 0 0.4em 0;">
- <% unless @network.description.nil? or @network.description.empty? %>
- <%= @network.description_html %>
- <% else %>
- <p><i>No description</i></p>
- <% end %>
- </div>
-
- <p>
- <b>Created at:</b>
- <%=datetime @network.created_at %>
- </p>
-
- <% unless @network.unique_name.nil? or @network.unique_name.empty? %>
- <p>
- <b>Unique name:</b>
- <%=h @network.unique_name %>
- </p>
- <% end %>
-
- <% if mine? @network %>
- <br/>
- <div class="box_currentuser_specific">
- <% if @network.open? %>
- You have set this Group to automatically accept all membership requests.
- <% elsif @network.membership_by_request? %>
- You have set this Group to require membership requests to be approved by a group administrator.
- <% else %>
- You have set this Group to be closed to membership requests unless invited by a group administrator.
- <% end %>
- </div>
- <% end %>
-
- <br/>
-
- <div class="contribution_section_box">
-<% address@hidden(true) -%>
-<% address@hidden() - admins -%>
- <p class="heading">
- Administrators
- <a name="group_members"></a>
- </p>
- <div>
- <%= render :partial => "networks/members", :locals => { :collection => admins, :size => 60 } %>
- </div>
- <p class="heading">
- Members
- </p>
- <div>
- <%= render :partial => "networks/members", :locals => { :collection => others, :size => 60 } %>
- </div>
- </div>
-
-</div>
+<div id="tabsContainer" class="tabsContainer"></div>
-<div class="contribution_right_box">
- <%= render :partial => "owner_box", :locals => { :network => @network } %>
- <%= render :partial => "statistics_box", :locals => { :network => @network, :items => @shared_items } %>
-
- <div class="contribution_section_box"> <!-- style="width: 130px; padding: 0.4em 0.8em; font-size: 93%;" -->
- <p>
- <b>
- This group has been credited
- <a href="" pluralize(@network.creditations.length, "time") -%></a>
- <a name="group_creditations"></a>
- </b>
- </p>
- </div>
-
- <%= render :partial => "tags/tags_box", :locals => { :taggable => @network,
- :owner_id => (@network.user_id),
- :add_path => tag_network_path(@network),
- :edit_path => edit_network_path(@network),
- :allow_edit => logged_in? ? @network.user_id == current_user.id : false } %>
-
- <%= render :partial => "announcements", :locals => { :group => @network, :count => 5 } -%>
-</div>
+<div class="tabContainer">
+ <div class="tabTitle">Overview</div>
+ <div class="tabContent">
+ <div class="contribution_left_box">
+ <div class="box_simple" style="margin: 0 0 0.4em 0;">
+ <% unless @network.description.nil? or @network.description.empty? %>
+ <%= @network.description_html %>
+ <% else %>
+ <p><i>No description</i></p>
+ <% end %>
+ </div>
-<div class="clearer"> </div>
+ <p>
+ <b>Created at:</b>
+ <%=datetime @network.created_at %>
+ </p>
-<br/>
+ <% unless @network.unique_name.nil? or @network.unique_name.empty? %>
+ <p>
+ <b>Unique name:</b>
+ <%=h @network.unique_name %>
+ </p>
+ <% end %>
-<div id="tabsContainer" class="tabsContainer"></div>
+ <a name="news"></a>
+ <h3>News</h3>
+ <%= render :partial => "layouts/news", :locals => { :collection => news(@network, true) } %>
-<div class="tabContainer">
- <div class="tabTitle">News</div>
- <div class="tabContent">
- <a name="news"></a>
- <%= render :partial => "layouts/news", :locals => { :collection => news(@network, true) } %>
- </div>
-</div>
+ </div>
-<div class="tabContainer">
- <div class="tabTitle">Shared Items (<%= @shared_items.length -%>)</div>
- <div class="tabContent" id="shared_items">
- <a name="shared_items"></a>
- <% unless @shared_items.empty? %>
- <%= view_privileges_notice %>
+ <div class="contribution_right_box">
+ <%= render :partial => "owner_box", :locals => { :network => @network } %>
+ <%= render :partial => "statistics_box", :locals => { :network => @network, :items => @shared_items } %>
- <div style="float: right; margin: 0.5em;">
- Sort:
- <select = this.options[this.selectedIndex].value;">
- <% @item_sort_options.each do |option, label| %>
- <option value="?item_sort=<%= option -%>#shared_items" <% if params[:item_sort] == option -%> selected="selected"<% end -%>><%= label -%></option>
- <% end %>
- </select>
+ <div class="contribution_section_box"> <!-- style="width: 130px; padding: 0.4em 0.8em; font-size: 93%;" -->
+ <p>
+ <b>
+ This group has been credited
+ <a href="" pluralize(@network.creditations.length, "time") -%></a>
+ <a name="group_creditations"></a>
+ </b>
+ </p>
</div>
- <%= render :partial => "contributions/table", :locals => { :collection => @shared_items } %>
+ <%= render :partial => "tags/tags_box", :locals => { :taggable => @network,
+ :owner_id => (@network.user_id),
+ :add_path => tag_network_path(@network),
+ :edit_path => edit_network_path(@network),
+ :allow_edit => logged_in? ? @network.user_id == current_user.id : false } %>
- <div style="clear: both"></div>
+ <%= render :partial => "announcements", :locals => { :group => @network, :count => 5 } -%>
+ </div>
+ <div class="clearer"> </div>
+ </div>
+</div>
- <% else %>
- <p class="none_text">No items have been shared with this Group yet.</p>
- <% end %>
- </div>
+<div class="tabContainer">
+ <div class="tabTitle">Members (<%= @network.members.size -%>)</div>
+ <div class="tabContent">
+ <a name="members"></a>
+ <div class="contribution_section_box">
+ <a name="group_members"></a>
+ <% owner = @network.owner -%>
+ <p class="heading">
+ Owner
+ </p>
+ <div>
+ <%= render :partial => "networks/members", :locals => { :collection => [owner], :size => 60 } %>
+ </div>
+ <% admins = @network.administrators(false)-%>
+ <% unless admins.empty? %>
+ <p class="heading">
+ Administrators
+ </p>
+ <div>
+ <%= render :partial => "networks/members", :locals => { :collection => admins, :size => 60 } %>
+ </div>
+ <% end %>
+ <% others = @network.members - admins - address@hidden -%>
+ <% unless others.empty? %>
+ <p class="heading">
+ Members
+ </p>
+ <div>
+ <%= render :partial => "networks/members", :locals => { :collection => others, :size => 60 } %>
+ </div>
+ <% end %>
+ </div>
+ </div>
</div>
<div class="tabContainer">
<div class="tabTitle">Creditations (<%= @network.creditations.length -%>)</div>
- <div class="tabContent">
-
+ <div class="tabContent">
+
<a name="creditations"></a>
<% unless (creditations = @network.creditations).empty? %>
<%= view_privileges_notice %>
@@ -208,45 +185,54 @@
</div>
<% if logged_in? && @network.administrator?(current_user.id) %>
-
+
<% memberships = @network.memberships_accepted %>
<div class="tabContainer">
<div class="tabTitle">Manage Memberships</div>
<div class="tabContent">
<a name="manage_memberships"></a>
+
+ <% if mine? @network %>
+ <br/>
+ <div class="box_currentuser_specific">
+ <strong>New member policy:</strong><br/>
+ <% if @network.open? %>
+ You have set this Group to automatically accept all membership requests.
+ <% elsif @network.membership_by_request? %>
+ You have set this Group to require membership requests to be approved by a group administrator.
+ <% else %>
+ You have set this Group to be closed to membership requests unless invited by a group administrator.
+ <% end %>
+ </div>
+ <% end %>
+
+ <h3>Members</h3>
<% unless memberships.empty? %>
<%= render :partial => "memberships/table", :locals => { :collection => memberships, :network => false } %>
<% else %>
<p><i>No additional members belong to this Group</i></p>
<% end %>
- </div>
- </div>
-
- <% requests = @network.memberships_requested %>
- <div class="tabContainer">
- <div class="tabTitle">Requests Pending (<%= @network.memberships_requested.length -%>)</div>
- <div class="tabContent">
+
<a name="requests_pending"></a>
+ <h3>Requests to join</h3>
+ <% requests = @network.memberships_requested %>
<% unless requests.empty? %>
<p></p>
<%= render :partial => "memberships/table", :locals => { :collection => requests, :network => false } %>
<% else %>
<p><i>No requests are pending for this Group</i></p>
<% end %>
- </div>
- </div>
-
- <% invited = @network.memberships_invited %>
- <div class="tabContainer">
- <div class="tabTitle">Invites Pending (<%= @network.memberships_invited.length -%>)</div>
- <div class="tabContent">
+
<a name="invites_pending"></a>
+ <h3>Invitations</h3>
+ <% invited = @network.memberships_invited %>
<% unless invited.empty? %>
<p></p>
<%= render :partial => "memberships/table", :locals => { :collection => invited, :network => false } %>
<% else %>
<p><i>No invites are pending for this Group</i></p>
<% end %>
+
</div>
</div>
Modified: branches/events/app/views/oauth/_form.rhtml (3490 => 3491)
--- branches/events/app/views/oauth/_form.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/oauth/_form.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,54 +1,17 @@
<div class="field">
- <label for=""
- <%=f.text_field :name %>
+ <label for=""
+ <%=f.text_field :name %>
</div>
<div class="field">
- <% if current_user.admin? %>
- <label for=""
- <% unless @client_application.id %>
- <%= select_tag "client_application[key_type]", options_for_select([ "User", "System"], "User") %>
- <% else %>
- <%= select_tag "client_application[key_type]", options_for_select([ "User", "System"], @client_application.key_type) %>
- <% end %>
+ <label for="" Application URL*</label><br/>
+ <%=f.text_field :url%>
</div>
<div class="field">
- <label for="" User*</label><br/>
- <% unless @client_application.id %>
- <select id="client_application[user_id]" name="client_application[user_id]" %>
- <% all_users().each do |u| %>
- <option <%= 'selected="selected"' if u.id==current_user.id %> value="<%= u.id %>"><%= h(u.name) %></option><% end %>
- </select>
- <% else %>
- <select id="client_application[user_id]" name="client_application[user_id]">
- <% all_users().each do |u| %>
- <option <%= 'selected="selected"' if address@hidden %> value="<%= u.id %>"><%= h(u.name) %></option><% end %>
- </select>
- <% end %>
- <% else %>
- <%= f.hidden_field :user_id, :value => current_user.id %>
- <% unless @client_application.id %>
- <%= f.hidden_field :key_type, :value => "User" %>
- <% else %>
- <%= f.hidden_field :key_type, :value => @client_application.key_type %>
- <% end %>
- <% end %>
- <% unless @client_application.id %>
- <%= f.hidden_field :creator_id, :value => current_user.id %>
- <% else %>
- <%= f.hidden_field :creator_id, :value => @client_application.creator_id %>
- <% end %>
-
+ <label for="" URL*</label><br/>
+ <%=f.text_field :callback_url%>
</div>
<div class="field">
- <label for="" Application URL*</label><br/>
- <%=f.text_field :url%>
+ <label for="" URL</label><br/>
+ <%=f.text_field :support_url%>
</div>
-<div class="field">
- <label for="" URL*</label><br/>
- <%=f.text_field :callback_url%>
-</div>
-<div class="field">
- <label for="" URL</label><br/>
- <%=f.text_field :support_url%>
-</div>
Modified: branches/events/app/views/oauth/_permissions.rhtml (3490 => 3491)
--- branches/events/app/views/oauth/_permissions.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/oauth/_permissions.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,5 +1,4 @@
<h2>Permissions</h2>
-<% checkboxes=[] %>
<% permissions_categorised=permissions_categorised(@permissions) %>
<% for category,permissions in permissions_categorised %>
<h3><%= category.capitalize %></h3>
@@ -8,34 +7,16 @@
<% for type,data in permission -%>
<% key=data['URI'] -%>
<% key_type = "#{type} #{key}" -%>
- <% if (@permissions_for.include?(key_type)) %>
- <%=check_box_tag "key_permissions[#{type} #{key}]", 1, true %> <%= type %> <%= key %>
- <% else %>
- <%=check_box_tag "key_permissions[#{type} #{key}]" %> <%= type %> <%= key %>
- <% end -%>
- <% checkboxes.push("key_permissions[#{type} #{key}]"); %>
-
+ <% checked = @permissions_for.include?(key_type) %>
+ <%= check_box_tag "key_permissions[#{type} #{key}]", 1, checked, :class => "permission" %> <%= type %> <%= key %>
<% end %>
<% end -%>
</p>
<% end %>
<br/>
<p style="text-align:center;" >
- <input type="button" name="check_all" value="Check All" checkboxes = new Array();
- <% i = 0 -%>
- <% for c in checkboxes %>
- <%= "checkboxes[#{i}]='#{c}';" -%>
- <% i=i+1 -%>
- <% end -%>
- checkAll(checkboxes);" />
-
- <input type="button" name="uncheck_all" value="Uncheck All" checkboxes = new Array();
- <% i = 0 -%>
- <% for c in checkboxes %>
- <%= "checkboxes[#{i}]='#{c}';" -%>
- <% i=i+1 -%>
- <% end -%>
- uncheckAll(checkboxes);" />
+ <input type="button" name="check_all" value="Check All" (e) { e.checked = true });"/>
+ <input type="button" name="uncheck_all" value="Uncheck All" (e) { e.checked = false });"/>
</p>
Modified: branches/events/app/views/oauth/edit.rhtml (3490 => 3491)
--- branches/events/app/views/oauth/edit.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/oauth/edit.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,17 +1,13 @@
<h1>Edit OAuth details for <address@hidden></h1>
-<% form_for :client_application, :url ="" { :action ="" :update } do |f| %>
- <%= f.hidden_field :id %>
- <%= render :partial => "form", :locals => { :f => f } %>
- <% if (@client_application.nil? or current_user.admin?) %>
- <%= render :partial => "permissions", :locals => { :f => f } %>
- <% else %>
- <% if (@client_application.key_type=="User") %>
- <%= render :partial => "permissions", :locals => { :f => f } %>
- <% else %>
- <%= render :partial => "show_permissions" %>
- <% end %>
- <% end %>
- <br/><br/>
+<% form_for @client_application, :url ="" { :action ="" "update", :controller => "oauth" }, :method => :put do |f| %>
+
+ <%= f.hidden_field :id %>
+
+ <%= render :partial => "form", :locals => { :f => f } %>
+
+ <%= render :partial => "permissions", :locals => { :f => f } %>
+
+ <br/><br/>
<p style="text-align: center; font-weight: bold;"><%= submit_tag "Update" %></p>
<% end %>
Modified: branches/events/app/views/oauth/index.rhtml (3490 => 3491)
--- branches/events/app/views/oauth/index.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/oauth/index.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -31,16 +31,6 @@
<div><%=link_to client.name,:action=""
<%end%>
<%end%>
-<% if current_user.admin? %>
-<h3>Client Applications You Have Created For Other Users</h3>
-<% if @admin_client_applications.empty? %>
- <p>You do not currently have any client applications that you have created or other users.</p>
-<%else%>
- <address@hidden do |client|%>
- <div><%=link_to client.name,:action=""
- <%end%>
-<% end %>
-<% end %>
<ul class="sectionIcons">
<li><%= icon "register_application", {:controller =>'oauth',:action="" nil, nil, "Register Client Application" %></li>
</ul>
Modified: branches/events/app/views/oauth/show.rhtml (3490 => 3491)
--- branches/events/app/views/oauth/show.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/oauth/show.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -6,9 +6,6 @@
<p>
<b>Main Application URL:</b> <address@hidden>
</p>
-<p>
- <b>Key Type:</b> <address@hidden>
-</p>
<% if current_user.admin? %>
<p>
<b>For User:</b> <a href="" user_path(@client_application.user.id) %>"><address@hidden></a>
Modified: branches/events/app/views/packs/_breadcrumbs.rhtml (3490 => 3491)
--- branches/events/app/views/packs/_breadcrumbs.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/packs/_breadcrumbs.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,5 +1,14 @@
-<li><%= link_to 'Packs', packs_path %></li>
+<% if @context %>
+ <li><%= link_to visible_name(@context).pluralize, polymorphic_url(@context.class.name.underscore.pluralize) %></li>
+ <li><%= link_to @context.name, @context %></li>
+<% end %>
+<% if controller.action_name == 'index' %>
+ <li>Packs</li>
+<% else %>
+ <li><%= link_to 'Packs', packs_path %></li>
+<% end %>
+
<% if ["show", "new", "edit", "all", "new_item", "edit_item", "search"].include? controller.action_name.to_s %>
<% case controller.action_name.to_s; when "show" %>
<li><%= h(@pack.title) %></li>
Modified: branches/events/app/views/packs/_items.rhtml (3490 => 3491)
--- branches/events/app/views/packs/_items.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/packs/_items.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,6 @@
<div id="packItems">
- <% if pack.items_count > 0 -%>
+ <% if (contributable_entries.size + remote_entries.size) > 0 -%>
<% if false -%>
<%= view_privileges_notice -%>
@@ -10,7 +10,7 @@
<ul id="packItemsList">
<!-- Contributable Item Entries -->
- <% pack.contributable_entries.each do |e| %>
+ <% contributable_entries.each do |e| %>
<% show = e.available? ? Authorization.check("view", e.contributable, current_user) : false -%>
<li>
<table>
@@ -37,8 +37,7 @@
<b><%= visible_name(e.contributable_type) -%>:</b>
<% unless e.contributable_version.blank? -%>
- <% # HACK: only workflows are versioned at the moment -%>
- <%= versioned_workflow_link e.contributable_id, e.contributable_version, false -%>
+ <%= versioned_resource_link e.contributable, e.contributable_version, false -%>
<% if false %><span style="color: #666666;">(version <%= e.contributable_version -%>)</span><% end %>
<% else -%>
<%= contributable(e.contributable_id, e.contributable_type) %>
@@ -98,7 +97,7 @@
<% end -%>
<!-- Remote Item Entries -->
- <% pack.remote_entries.each do |e| %>
+ <% remote_entries.each do |e| %>
<li>
<table>
<tr>
Modified: branches/events/app/views/packs/_table.rhtml (3490 => 3491)
--- branches/events/app/views/packs/_table.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/packs/_table.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,74 +1,80 @@
<% query ||= false -%>
-<% odd_row = false -%>
-<% unless collection.empty? %>
-<table class="alt_table">
- <% for pack in collection %>
- <% # If only one item in collection, check if 'show' permission is available (eg: if this partial was called from contributions/table) -%>
- <% if collection.size == 1 -%>
- <% show ||= Authorization.check("view", pack, current_user) -%>
- <% else -%>
- <% show = Authorization.check("view", pack, current_user) -%>
- <% end -%>
- <% if show -%>
- <% cache(:controller => 'packs_cache', :action ="" 'listing', :id => pack.id) do -%>
- <tr class="<%= (odd_row = !odd_row) ? "odd_row" : "even_row" %>">
- <td style="width: 100px;">
- <p style="margin-top:0; padding-top:0; text-align: center;"><b><%= owner_text pack -%>:</b></p>
- <center><%= contributor(pack.contribution.contributor_id, pack.contribution.contributor_type, true, 60) %></center>
- </td>
- <td style="text-align: left;">
- <a name="<%= pack.title.gsub(/ /, "_") %>"></a>
- <p class="title">
- <%= icon "pack", nil, nil, nil, '' %>
- <% title = contributable_name(pack.id, 'Pack') %>
- <%=link_to(query ? highlight_all(title, query) : title, pack_path(pack)) %>
- </p>
-
- <p style="font-size: 85%; margin-top: 0; padding-top: 0;">
- <b>Created:</b> <%=datetime pack.contribution.created_at, false %>
- <% unless pack.contribution.created_at == pack.contribution.updated_at %>
- | <b>Last updated:</b> <%=datetime pack.contribution.updated_at, false %>
- <% end %>
- </p>
-
- <div class="desc" style="font-size: 85%;">
- <% unless pack.description.blank? %>
- <% desc = truncate(strip_html(pack.description), :length => 500) %>
- <%= query ? highlight_all(desc, query) : desc %>
- <% else -%>
- <span class="none_text">No description</span>
- <% end %>
- </div>
-
- <p class="standout" style="margin-top: 0.4em;">
- <%= pluralize pack.items_count, "item" -%> in this pack
- </p>
-
- <p style="font-size: 85%;">
- <a href="" pack_path(pack) + '#comments' -%>"><b>Comments: </b><%= pack.comments.count %></a> |
- <b>Viewed:</b> <%=pluralize pack.contribution.site_viewings_count, "time" %> |
- <b>Downloaded:</b> <%=pluralize pack.contribution.site_downloads_count, "time" %>
- </p>
-
- <% unless (tags = pack.tags).empty? %>
- <a href="" pack_path(pack) + '#tags' -%>"><p style="font-size: 85%;"><b>Tags:</b></p></a>
- <div style="display:inline;" class="tags_onesize"><%= tag_cloud_from_collection tags, true %></div>
- <% else %>
- <p style="font-size: 85%;"><i>This Pack has no tags!</i></p>
- <% end %>
- </td>
-
- <td class="actions" style="width: 80px;">
- <%= icon "show", pack_path(pack), nil, nil, "View" %>
- <% if Authorization.check("download", pack, current_user) -%><%= icon('download', download_pack_path(pack), nil, nil, 'Download') -%><% end -%>
- <% if mine?(pack) %><%= icon "manage", edit_pack_path(pack), nil, nil, "Manage" %><% end %>
- <% if Authorization.check("edit", pack, current_user) -%><%= icon('new', new_item_pack_path(pack), nil, nil, 'Add New Item') -%><% end -%>
- </td>
- </tr>
- <% end %>
- <% end %>
- <% end %>
-</table>
+<% collection.each do |pack| %>
+ <% # If only one item in collection, check if 'show' permission is available (eg: if this partial was called from contributions/table) -%>
+ <% if collection.size == 1 -%>
+ <% show ||= Authorization.check("view", pack, current_user) -%>
+ <% else -%>
+ <% show = Authorization.check("view", pack, current_user) -%>
+ <% end -%>
+ <% if show -%>
+ <div class="resource_list_item <%= pack.contribution.policy.layout -%>">
+
+ <div class="avatar_panel">
+ <span class="owner"><%= owner_text pack -%></span>
+ <%= contributor(pack.contribution.contributor_id, pack.contribution.contributor_type, true, 60) %>
+ <% if layout = pack.contribution.policy.layout %>
+ <% begin %>
+ <%= render :partial => "layouts/skins/branding/#{layout}" %>
+ <% rescue ActionView::MissingTemplate %>
+ <% end %>
+ <% end %>
+ </div>
+
+ <div class="main_panel">
+
+ <div class="actions">
+ <%= icon "show", pack_path(pack), nil, nil, "View" %>
+ <% if Authorization.check("download", pack, current_user) -%><%= icon('download', download_pack_path(pack), nil, nil, 'Download') -%><% end -%>
+ <% if mine?(pack) %><%= icon "manage", edit_pack_path(pack), nil, nil, "Manage" %><% end %>
+ <% if Authorization.check("edit", pack, current_user) -%><%= icon('new', new_item_pack_path(pack), nil, nil, 'Add New Item') -%><% end -%>
+ </div>
+
+ <% cache(:controller => 'packs_cache', :action ="" 'listing', :id => pack.id) do -%>
+ <a name="<%= pack.title.gsub(/ /, "_") %>"></a>
+ <p class="title">
+ <%= icon "pack", nil, nil, nil, '' %>
+ <% truncated_title = truncate(pack.title, :length => 55) %>
+ <%=link_to(query ? highlight_all(truncated_title, query) : truncated_title, pack_path(pack),
+ :title => pack.title) %>
+ </p>
+
+ <br/>
+ <p>
+ <b>Created:</b> <%=datetime pack.contribution.created_at, false %>
+ <% unless pack.contribution.created_at == pack.contribution.updated_at %>
+ | <b>Last updated:</b> <%=datetime pack.contribution.updated_at, false %>
+ <% end %>
+ </p>
+
+ <div class="desc">
+ <% unless pack.description.blank? %>
+ <% desc = truncate(strip_html(pack.description), :length => 500) %>
+ <%= query ? highlight_all(desc, query) : desc %>
+ <% else -%>
+ <span class="none_text">No description</span>
+ <% end %>
+ </div>
+
+ <p class="standout">
+ <%= pluralize pack.items_count, "item" -%> in this pack
+ </p>
+
+ <p>
+ <a href="" pack_path(pack) + '#comments' -%>"><b>Comments: </b><%= pack.comments.count %></a> |
+ <b>Viewed:</b> <%=pluralize pack.contribution.site_viewings_count, "time" %> |
+ <b>Downloaded:</b> <%=pluralize pack.contribution.site_downloads_count, "time" %>
+ </p>
+
+ <% unless (tags = pack.tags).empty? %>
+ <a href="" pack_path(pack) + '#tags' -%>"><p><b>Tags:</b></p></a>
+ <div style="display:inline;" class="tags_onesize"><%= tag_cloud_from_collection tags, true %></div>
+ <% else %>
+ <p><i>This Pack has no tags!</i></p>
+ <% end %>
+ <% end %>
+ </div>
+ </div>
+ <% end %>
<% end %>
Copied: branches/events/app/views/packs/_version_selector.rhtml (from rev 3490, trunk/app/views/packs/_version_selector.rhtml) (0 => 3491)
--- branches/events/app/views/packs/_version_selector.rhtml (rev 0)
+++ branches/events/app/views/packs/_version_selector.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,82 @@
+<script type="text/_javascript_">
+ function showVersion(form) {
+ var url = ""
+ location.href = ""
+ form.submit
+ }
+</script>
+
+<div class="contribution_version_selector_box">
+
+ <table>
+ <tbody>
+ <tr>
+ <td class="heading" style="vertical-align: top;">
+ <% if version %>
+ <%= info_icon_with_tooltip("This box shows version #{version.version.to_s} for this entry") -%>
+ <span><%= "Version #{version.version.to_s} #{resource.describe_version(version.version)}" -%></span>
+ <span class="count_text">(of <%= resource.versions.length -%>)</span>
+ <% else %>
+ <%= info_icon_with_tooltip("This box shows the live version for this entry") -%>
+ <span>Live view</span>
+ <% if resource.versions.length > 0 %>
+ <span class="count_text">(<%= resource.versions.length -%> versions available)</span>
+ <% end %>
+ <% end %>
+ <a name="versions"></a>
+ </td>
+ <td>
+ <% if resource.versions.length > 0 %>
+ <form return false;" style="text-align: right;">
+ <b>View version: </b>
+ <select id="resource_versions"
+ <option value="<%= polymorphic_path(resource) %>" <%= "selected" if version.nil? -%>>Live view</option>
+ <% resource.versions.reverse.each do |v| %>
+ <option value="<%= send(path, resource, v.version.to_s) %>" <%= "selected" if !version.nil? && v.version == version.version -%>>
+ <%= "#{v.version.to_s} #{resource.describe_version(v.version)}" %>
+ </option>
+ <% end %>
+ </select>
+ </form>
+ <% end %>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <% if version %>
+ <div id="version_info_box" style="color: #666666; font-size: 85%; margin: 0.6em 0.5em 0.2em 0.5em; border-top: 1px solid #DDDDDD; padding-top: 0.4em;">
+ <p style="text-align: center;">
+ <b>Version created on:</b>
+ <span><%= datetime version.created_at, false %></span>
+ <% if version.respond_to?(:contributor_id) && version.respond_to?(:contributor_type) %>
+ <b>by:</b>
+ <span><%= contributor(version.contributor_id, version.contributor_type) %></span>
+ <% end %>
+ <% if !version.revision_comments.blank? %>
+ <span> | </span>
+ <span><%= link_to_function "Revision comment " + expand_image, visual_effect(:toggle_blind, "version_info_box_comments", :duration => 0.3) %></span>
+ <% end %>
+ </p>
+
+ <% unless version.created_at == version.updated_at %>
+ <p style="text-align: center;">
+ <b>Last edited on:</b>
+ <span><%= datetime version.updated_at, false %></span>
+ <% if version.respond_to?(:last_edited_by) %>
+ <b>by:</b>
+ <span><%= contributor(version.last_edited_by, "User") %></span>
+ <% end %>
+ </p>
+ <% end %>
+ </div>
+ <% end %>
+
+ <% if version && !version.revision_comments.blank? -%>
+ <div id="version_info_box_comments" style="display: none; border: 1px dotted #CCCCCC; padding: 0.3em 0.5em;">
+ <%= white_list version.revision_comments %>
+ </div>
+ <% end %>
+
+</div>
+
Modified: branches/events/app/views/packs/edit.rhtml (3490 => 3491)
--- branches/events/app/views/packs/edit.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/packs/edit.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,6 @@
<% t "Manage" -%>
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<%= _javascript__include_tag "osp.js" %>
<h1>Manage Pack: <%= contributable_name(@pack.id, 'Pack') %></h1>
@@ -20,7 +20,7 @@
<%= f.text_field :title, :size => 86 %>
<p><b>Description: </b></p>
- <%= fckeditor_textarea(:pack, :description, :toolbarSet => 'Simple', :width => '550px', :height => '300px') %>
+ <%= f.text_area(:description, :width => '550px', :height => '300px', :class => 'ckeditor') %>
</div>
</center>
@@ -30,6 +30,8 @@
<% if @pack.owner?(current_user) %>
<%= render :partial => "contributions/sharing_form", :locals => { :edit => true, :contributable => @pack, :update_perms => true } %>
+
+ <%= render :partial => "contributions/license_form", :locals => { :object => :pack, :contributable => @pack, :edit => true } -%>
<% end %>
<p>
Modified: branches/events/app/views/packs/index.rhtml (3490 => 3491)
--- branches/events/app/views/packs/index.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/packs/index.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -20,5 +20,6 @@
<center><%= image_tag 'packs.png' -%></center>
</div>
</div>
+<h1><%= context_prefix(@context) -%> Packs</h1>
<%= render :partial => "content/index" -%>
Modified: branches/events/app/views/packs/new.rhtml (3490 => 3491)
--- branches/events/app/views/packs/new.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/packs/new.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,6 @@
<% t "New" -%>
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<%= _javascript__include_tag "osp.js" %>
<h1>New Pack</h1>
@@ -16,7 +16,7 @@
<%= text_field_tag "pack[title]", nil, :size => 86 %>
<p><b>Description: </b></p>
- <%= fckeditor_textarea(:pack, :description, :toolbarSet => 'Simple', :width => '550px', :height => '300px') %>
+ <%= text_area_tag 'pack[description]', nil, :width => '550px', :height => '300px', :class => 'ckeditor' -%>
</div>
</center>
@@ -25,6 +25,8 @@
<%= render :partial => "tags/tags_form", :locals => { :edit => false, :taggable => @pack } %>
<%= render :partial => "contributions/sharing_form", :locals => { :edit => false, :contributable => @pack, :update_perms => true } %>
+
+ <%= render :partial => "contributions/license_form", :locals => { :object => :pack, :contributable => @pack, :edit => false } -%>
<p style="text-align: center;">
<%= submit_tag "Create", :disable_with => "Creating..." %>
Modified: branches/events/app/views/packs/show.rhtml (3490 => 3491)
--- branches/events/app/views/packs/show.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/packs/show.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,10 +1,17 @@
<% t "#{contributable_name(@pack.id, 'Pack')} (#{h @pack.contributor_name})" -%>
+<% items_count = @version ? @version.items_count : @pack.items_count %>
+<% contributable_entries = @version ? @version.contributable_entries : @pack.contributable_entries %>
+<% remote_entries = @version ? @version.remote_entries : @pack.remote_entries %>
+
<% if @authorised_to_edit %>
<ul class="sectionIcons">
<% if mine?(@pack) -%>
<li><%= icon('manage', edit_pack_path(@pack), nil, nil, 'Manage Pack') -%></li>
<% end -%>
+ <% if @authorised_to_edit -%>
+ <li><%= icon('new', snapshot_pack_path(@pack), nil, { :confirm => 'Are you sure that you would like to create a new snapshot of this Pack?', :method => :post }, 'Create snapshot') %></li>
+ <% end -%>
<% if Authorization.check("destroy", @pack, current_user) %>
<li><%= icon('destroy', pack_path(@pack), nil, { :confirm => 'This deletes the Pack and all metadata such as tags and comments, BUT does not delete the actual items pointed to in the Pack. Are you sure you would like to delete this Pack?', :method => :delete }, 'Delete Pack') %></li>
<% end %>
@@ -32,6 +39,9 @@
<div class="contribution_left_box">
<div class="contribution_version_box">
+
+ <%= render(:partial => "packs/version_selector", :locals => { :resource => @pack, :version => @version, :path => :pack_version_path }) %>
+
<div class="contribution_version_inner_box">
<h3>
@@ -65,10 +75,10 @@
<% end %>
<%= info_icon_with_tooltip("This section shows all the items that are pointed to in this pack. This can be a combination of internal and external items.") -%>
- Items <span class="count_text">(<%= @pack.items_count -%>)</span>
+ Items <span class="count_text">(<%= items_count -%>)</span>
</h4>
- <%= render :partial => "items", :locals => { :pack => @pack, :authorised_to_edit => @authorised_to_edit } -%>
+ <%= render :partial => "items", :locals => { :pack => @pack, :contributable_entries => contributable_entries, :remote_entries => remote_entries, :authorised_to_edit => @authorised_to_edit } -%>
<br/><br/>
<h4>
@@ -122,10 +132,12 @@
<div class="contribution_section_box">
<p style="font-size: 108%;">
- <b><%= pluralize @pack.items_count, "item" %> in this pack</b>
+ <b><%= pluralize items_count, "item" %> in this pack</b>
</p>
</div>
-
+
+ <%= render :partial => "contributions/license_box", :locals => { :contributable => @pack } %>
+
<%= render :partial => "contributions/curation_box", :locals => { :contributable => @pack } %>
<%= render :partial => "tags/tags_box", :locals => { :taggable => @pack,
Modified: branches/events/app/views/profiles/_form.rhtml (3490 => 3491)
--- branches/events/app/views/profiles/_form.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/profiles/_form.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<p style="color: #666666; font-weight: bold;">
Note: information you enter on this page will be visible to everyone (ie: will be public), but all fields are optional.
@@ -107,7 +107,7 @@
</span>
</p>
-<%= fckeditor_textarea(:profile, :body, :toolbarSet => 'Simple', :width => '700px', :height => '300px') %>
+<%= form.text_area(:body, :width => '700px', :height => '300px', :class => 'ckeditor') -%>
<br/>
<br/>
Modified: branches/events/app/views/reviews/_form.rhtml (3490 => 3491)
--- branches/events/app/views/reviews/_form.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/reviews/_form.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<%= error_messages_for 'review' %>
@@ -25,4 +25,4 @@
</div>
<p><b>Your review</b></p>
-<%= fckeditor_textarea(:review, :review, :toolbarSet => 'Basic', :width => '455px', :height => '400px') %>
+<%= form.text_area(:review, :width => '455px', :height => '400px', :class => 'ckeditor') -%>
Modified: branches/events/app/views/reviews/_reviews.rhtml (3490 => 3491)
--- branches/events/app/views/reviews/_reviews.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/reviews/_reviews.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,5 +1,3 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
-
<h2>
<%= icon "review", nil, "Reviews", { :style => "vertical-align: middle;" }, "" -%>
<span style="vertical-align: middle;"><%= link_to "Reviews", workflow_reviews_path(reviewable) %></span>
Modified: branches/events/app/views/runners/edit.rhtml (3490 => 3491)
--- branches/events/app/views/runners/edit.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/runners/edit.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -25,7 +25,7 @@
<%= text_field_tag "runner[username]", @runner.username, :size => 30 %>
<p><b>Password</b> (will be encrypted)</p>
- <%= text_field_tag "runner[password]", @runner.crypted_password.decrypt, :size => 30 %>
+ <%= text_field_tag "runner[password]", @runner.password.decrypt, :size => 30 %>
</fieldset>
<br/>
@@ -55,4 +55,4 @@
<center><%= submit_tag "Update", :disable_with => "Updating..." %></center>
<% end -%>
</div>
-</center>
\ No newline at end of file
+</center>
Modified: branches/events/app/views/users/_avatar.rhtml (3490 => 3491)
--- branches/events/app/views/users/_avatar.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/users/_avatar.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,7 +1,7 @@
<% size ||= 100 -%>
<% you_string ||= "" -%>
<% if user.kind_of? Fixnum then user = User.find(user) end -%>
-<div style="text-align:center; width: <%= size+6 %>px; line-height: 1.2em; padding: 0.2em 0;">
+<div class="avatar" style="width: <%= size+6 %>px">
<%= avatar(user, size) %>
<span style="display:block;margin-top:2px;text-align:center;">
<% if size > 59 %>
Modified: branches/events/app/views/users/_breadcrumbs.rhtml (3490 => 3491)
--- branches/events/app/views/users/_breadcrumbs.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/users/_breadcrumbs.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,8 @@
-<li><%= link_to 'Users', users_path -%></li>
+<% if controller.action_name == 'index' %>
+ <li>Users</li>
+<% else %>
+ <li><%= link_to 'Users', users_path %></li>
+<% end %>
<% if ["edit"].include? controller.action_name.to_s -%>
<li><%= link_to h(@user.name), user_path(@user) -%></li>
Modified: branches/events/app/views/users/_listing.rhtml (3490 => 3491)
--- branches/events/app/views/users/_listing.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/users/_listing.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,5 +1,5 @@
<td style="width: 100px"><div style="text-align: center; font-weight: bold">Member</div><br /><br /><center><%= contributor(user.id, 'User', true, 60) %></center></td>
- <td class="mid" style="text-align: left;">
+ <td class="mid" style="text-align: left; max-width: 370px;">
<p style="margin-top:0; padding-top:0; font-weight:bold; font-size: 108%;">
<%= icon "user", nil, nil, nil, '' %>
Modified: branches/events/app/views/users/show.rhtml (3490 => 3491)
--- branches/events/app/views/users/show.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/users/show.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -232,7 +232,8 @@
<% filter_contributables(@user.contributions).each do |klass, contributables| %>
<p>
<b>
- <%= link_to(pluralize(Authorization.scoped(klass.constantize, :authorised_user => current_user).find(:all, :select => "0", :conditions => { :contributor_type => 'User', :contributor_id => @user.id } ).length, controller_visible_name(klass.humanize.pluralize)), url_for(:action ="" controller_visible_name(klass.humanize.pluralize).downcase)) %>
+ <%= link_to(pluralize(Authorization.scoped(klass.constantize, :authorised_user => current_user).find(:all, :select => "0", :conditions => { :contributor_type => 'User', :contributor_id => @user.id } ).length, controller_visible_name(klass.humanize.pluralize)),
+ polymorphic_url(address@hidden, klass.pluralize.underscore.to_sym])) %>
</b>
</p>
<% end %>
@@ -410,13 +411,6 @@
<% contributables = (@user.contributions.select do |c| c.contributable_type == 'Pack' end).map do |c| c.contributable end %>
<%= render :partial => "packs/table", :locals => { :collection => contributables } %>
- <% when "Blogs" %>
-
- <%= view_privileges_notice %>
- <br/>
- <% contributables = (@user.contributions.select do |c| c.contributable_type == 'Blog' end).map do |c| c.contributable end %>
- <%= render :partial => "blogs/table", :locals => { :collection => contributables } %>
-
<% when "Credits" %>
<% unless (creditations = @user.creditations).empty? %>
Modified: branches/events/app/views/workflows/_breadcrumbs.rhtml (3490 => 3491)
--- branches/events/app/views/workflows/_breadcrumbs.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/workflows/_breadcrumbs.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,5 +1,14 @@
-<li><%= link_to 'Workflows', workflows_path %></li>
+<% if @context %>
+ <li><%= link_to visible_name(@context).pluralize, polymorphic_url(@context.class.name.underscore.pluralize) %></li>
+ <li><%= link_to @context.name, @context %></li>
+<% end %>
+<% if controller.action_name == 'index' %>
+ <li>Workflows</li>
+<% else %>
+ <li><%= link_to 'Workflows', workflows_path %></li>
+<% end %>
+
<% if ["show", "new", "edit", "search", "all", "new_version", "edit_version", "comments_timeline", "galaxy_tool"].include? controller.action_name.to_s %>
<% case controller.action_name.to_s; when "show" %>
<li><%= h(@workflow.title) %></li>
Copied: branches/events/app/views/workflows/_deprecation_event.html.erb (from rev 3490, trunk/app/views/workflows/_deprecation_event.html.erb) (0 => 3491)
--- branches/events/app/views/workflows/_deprecation_event.html.erb (rev 0)
+++ branches/events/app/views/workflows/_deprecation_event.html.erb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,32 @@
+<% wsdl_deprecations = deprecation_event[1] %>
+<% deprecation_event = deprecation_event[0] %>
+
+<% time_string = deprecation_event.date.strftime("#{deprecation_event.date.day.ordinalize} %B %Y") -%>
+<div class="deprecation_event">
+ <p>
+ <img src="" style="vertical-align: middle; float: left; margin: 0.5em"/>
+ This workflow uses one or more services that
+ <% if deprecation_event.date.past? %>
+ are deprecated as of <strong><%= time_string -%></strong>
+ (<%= time_ago_in_words(deprecation_event.date) -%> ago), and may no longer function.
+ <% else %>
+ will be deprecated on <strong><%= time_string -%></strong>
+ (in <%= time_ago_in_words(deprecation_event.date) -%>), and may no longer function after this date.
+ <% end %>
+ <a href="" {el.toggle();})">Show details...</a>
+ </p>
+ <div class="hidden" style="display: none">
+ <p><strong>Affected service WSDL<%= "s" if wsdl_deprecations.size > 1-%>:</strong></p>
+ <ul>
+ <% wsdl_deprecations.each do |wd| %>
+ <li><%= wd.wsdl -%></li>
+ <% end %>
+ </ul>
+
+ <% unless deprecation_event.details.nil? %>
+ <p class="hidden" style="display: none">
+ <strong>Details:</strong> <%= deprecation_event.details %>
+ </p>
+ <% end %>
+ </div>
+</div>
Modified: branches/events/app/views/workflows/_main_metadata_form.rhtml (3490 => 3491)
--- branches/events/app/views/workflows/_main_metadata_form.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/workflows/_main_metadata_form.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -71,7 +71,7 @@
<!-- Description -->
<p><b>Description</b></p>
- <%= fckeditor_textarea(:new_workflow, :body, :toolbarSet => 'Simple', :width => '500px', :height => '300px') %>
+ <%= text_area_tag("new_workflow[body]", nil, :width => '500px', :height => '300px', :class => 'ckeditor') -%>
</div>
Modified: branches/events/app/views/workflows/_table.rhtml (3490 => 3491)
--- branches/events/app/views/workflows/_table.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/workflows/_table.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,139 +1,135 @@
<% query ||= false -%>
-<% odd_row = false -%>
-<% unless collection.empty? %>
+<% collection.each do |workflow| %>
+ <% # If only one item in collection, check if 'show' permission is available (eg: if this partial was called from contributions/table) -%>
+ <% if collection.size == 1 -%>
+ <% show ||= Authorization.check("view", workflow, current_user) -%>
+ <% else -%>
+ <% show = Authorization.check("view", workflow, current_user) -%>
+ <% end -%>
+ <% if show -%>
-<table class="alt_table">
- <% for workflow in collection %>
- <% # If only one item in collection, check if 'show' permission is available (eg: if this partial was called from contributions/table) -%>
- <% if collection.size == 1 -%>
- <% show ||= Authorization.check("view", workflow, current_user) -%>
- <% else -%>
- <% show = Authorization.check("view", workflow, current_user) -%>
- <% end -%>
- <% if show -%>
- <tr class="<%= (odd_row = !odd_row) ? "odd_row" : "even_row" %>">
- <% cache(:controller => 'workflows_cache', :action ="" 'listing', :id => workflow.id) do -%>
- <td style="width: 100px;">
- <div class="workflow_type_box" style="width: auto; margin-bottom: 2em;">
- <%= link_to(h(workflow.content_type.title), content_type_path(workflow.content_type)) %>
- </div>
- <p style="margin-top:0; padding-top:0; text-align: center;"><b><%= owner_text workflow -%></b></p>
- <center><%= contributor(workflow.contribution.contributor_id, workflow.contribution.contributor_type, true, 60) %></center>
- </td>
- <td style="text-align: left; width: 587px">
- <a name="<%= workflow.title.gsub(/ /, "_") %>"></a>
- <p class="title">
- <%= icon "workflow", nil, nil, nil, '' %>
- <% title = contributable_name(workflow.id, 'Workflow') %>
- <%=link_to(query ? highlight_all(title, query) : title, workflow_path(workflow)) %>
- <span style="font-weight:normal;">
- (v<%= workflow.current_version %>)
- </span>
- </p>
-
- <p style="font-size: 85%; margin-top: 0; padding-top: 0;">
- <b>Created:</b> <%=datetime workflow.contribution.created_at, false -%>
- <% unless workflow.contribution.created_at == workflow.contribution.updated_at %>
- | <b>Last updated:</b> <%=datetime workflow.contribution.updated_at, false -%>
- <% end %>
- </p>
-
- <% unless (creditors = workflow.creditors).empty? %>
- <p style="font-size:85%;">
- <b>Credits:</b>
- <% creditors.each do |c| %>
- <% if c.creditor_type == 'User' %>
- <%= icon('user', nil, nil, nil, '') %>
- <% elsif c.creditor_type == 'Network' %>
- <%= icon('network-member', nil, nil, nil, '') %>
- <% end %>
- <%= contributor(c.creditor_id, c.creditor_type) %>
- <% end %>
- </p>
- <% end %>
- <% unless (attributors = workflow.attributors).empty? %>
- <p style="font-size:85%;">
- <b>Attributions:</b>
- <% attributors.each do |a| %>
- <% if Authorization.check("view", a.attributor, current_user) -%>
- <% if a.attributor_type == 'Workflow' %>
- <%= icon('workflow', nil, nil, nil, '') %>
- <% elsif a.attributor_type == 'Blob' %>
- <%= icon('blob', nil, nil, nil, '') %>
- <% end %>
- <%= contributable(a.attributor_id, a.attributor_type) %>
- <% end %>
- <% end %>
- </p>
- <% end %>
-
- <% if workflow.license_id.nil? %>
- <p style="font-size:85%;"><b>License: </b>No license</p>
- <% else %>
- <p style="font-size:85%;"><b>License: </b><% @license = License.find(workflow.license_id) %><%= link_to h(@license.title), license_path(@license) %></p>
+ <div class="resource_list_item <%= workflow.contribution.policy.layout -%>">
+
+ <div class="avatar_panel">
+ <div class="workflow_type_box">
+ <%= link_to(h(workflow.content_type.title), content_type_path(workflow.content_type)) %>
+ </div>
+ <span class="owner"><%= owner_text workflow -%></span>
+ <%= contributor(workflow.contribution.contributor_id, workflow.contribution.contributor_type, true, 60) %>
+ <% if layout = workflow.contribution.policy.layout %>
+ <% begin %>
+ <%= render :partial => "layouts/skins/branding/#{layout}" %>
+ <% rescue ActionView::MissingTemplate %>
+ <% end %>
+ <% end %>
+ </div>
+
+ <div class="main_panel">
+
+ <div class="actions">
+ <%= icon "show", workflow_path(workflow), nil, nil, "View" %>
+ <% if Authorization.check("download", workflow, current_user) -%>
+ <%= icon "download", download_workflow_path(workflow), nil, nil, "Download (v#{workflow.versions.count})" %>
+ <% if ( session[:callback] && (session[:callback][:types].include?(workflow.content_type_id))) -%>
+ <%= icon "download", callback_url(workflow).to_s, nil, {:rel => 'nofollow'}, session[:callback][:label] -%>
<% end %>
-
- <% desc_style = "font-size: 85%;" %>
+ <% end %>
+ <% if mine?(workflow) %>
+ <%= icon "manage", edit_workflow_path(workflow), nil, nil, "Manage" %>
+ <% end %>
+ </div>
+ <% cache(:controller => 'workflows_cache', :action ="" 'listing', :id => workflow.id) do -%>
+ <a name="<%= workflow.title.gsub(/ /, "_") %>"></a>
- <% unless workflow.image.nil? && workflow.svg.nil? -%>
- <p style="margin: 0; border: 0; width: 101px; float: left">
- <%= link_to image_tag(workflow_preview_path(workflow, 'thumb'), :class => 'framed_nospace'), workflow_path(workflow) %>
- </p>
+ <p class="title">
+ <%= icon "workflow", nil, nil, nil, '' %>
+ <% truncated_title = truncate(workflow.title, :length => 45) %>
+ <%=link_to(query ? highlight_all(truncated_title, query) : truncated_title, workflow_path(workflow),
+ :title => workflow.title) %>
+ <span style="font-weight:normal;">
+ (<%= workflow.current_version %>)
+ </span>
+ </p>
- <% desc_style << " margin-left: 110px; width: 250px;" %>
- <% end -%>
+ <p>
+ <b>Created:</b> <%=datetime workflow.contribution.created_at, false -%>
+ <% unless workflow.contribution.created_at == workflow.contribution.updated_at %>
+ | <b>Last updated:</b> <%=datetime workflow.contribution.updated_at, false -%>
+ <% end %>
+ </p>
- <p style="margin: 0; padding: 0; border: 0;">
- <div class="desc" style="<%= desc_style -%>">
- <% if workflow.body and workflow.body.length > 0 -%>
- <% desc = truncate(strip_html(workflow.body), :length => 500) -%>
- <%= query ? highlight_all(desc, query) : desc %>
- <% else -%>
- <span class="none_text">No description</span>
- <% end -%>
- </div>
+ <% unless (creditors = workflow.creditors).empty? %>
+ <p>
+ <b>Credits:</b>
+ <% creditors.each do |c| %>
+ <% if c.creditor_type == 'User' %>
+ <%= icon('user', nil, nil, nil, '') %>
+ <% elsif c.creditor_type == 'Network' %>
+ <%= icon('network-member', nil, nil, nil, '') %>
+ <% end %>
+ <%= contributor(c.creditor_id, c.creditor_type) %>
+ <% end %>
</p>
-
- <div style="clear: both"></div>
+ <% end %>
- <p style="font-size: 85%;">
- <a href="" workflow_path(workflow) + '#ratings' -%>"><b>Rating: </b><%= number_with_precision(workflow.rating, :precision => 1) %> / 5 (<%= pluralize workflow.ratings.count, 'rating' %>)</a> |
- <a href="" workflow_path(workflow) + '#versions' -%>"><b>Versions: </b><%= workflow.versions.count %></a> |
- <a href="" workflow_path(workflow) + '#reviews' -%>"><b>Reviews: </b><%= workflow.reviews.count %></a> |
- <a href="" workflow_path(workflow) + '#comments' -%>"><b>Comments: </b><%= workflow.comments.count %></a> |
- <a href="" workflow_path(workflow) + '#citations' -%>"><b>Citations: </b><%= workflow.citations.count %></a>
- </p>
-
- <p style="font-size: 85%;">
- <b>Viewed:</b> <%=pluralize workflow.contribution.site_viewings_count, "time" %> |
- <b>Downloaded:</b> <%=pluralize workflow.contribution.site_downloads_count, "time" %>
- </p>
-
- <% unless (tags = workflow.tags).empty? %>
- <a href="" workflow_path(workflow) + '#tags' -%>"><p style="font-size: 85%;"><b>Tags</b> (<%=tags.count-%>):</p></a>
- <div style="display:inline;" class="tags_onesize"><%= tag_cloud_from_collection tags, true %></div>
- <% else %>
- <p style="font-size: 85%;"><i>This Workflow has no tags!</i></p>
- <% end %>
- </td>
- <% end -%>
- <td class="actions" style="width: 120px;">
- <%= icon "show", workflow_path(workflow), nil, nil, "View" %>
- <% if Authorization.check("download", workflow, current_user) -%>
- <%= icon "download", download_workflow_path(workflow), nil, nil, "Download (v#{workflow.versions.count})" %>
- <% if ( session[:callback] && (session[:callback][:types].include?(workflow.content_type_id))) -%>
- <%= icon "download", callback_url(workflow).to_s, nil, {:rel => 'nofollow'}, session[:callback][:label] -%>
- <% end %>
- <% end %>
- <% if mine?(workflow) %><%= icon "manage", edit_workflow_path(workflow), nil, nil, "Manage" %><% end %>
- <br/><br/>
-
- </td>
- </tr>
- <% end -%>
- <% end -%>
+ <% unless (attributors = workflow.attributors).empty? %>
+ <p>
+ <b>Attributions:</b>
+ <% attributors.each do |a| %>
+ <% if Authorization.check("view", a.attributor, current_user) -%>
+ <% if a.attributor_type == 'Workflow' %>
+ <%= icon('workflow', nil, nil, nil, '') %>
+ <% elsif a.attributor_type == 'Blob' %>
+ <%= icon('blob', nil, nil, nil, '') %>
+ <% end %>
+ <%= contributable(a.attributor_id, a.attributor_type) %>
+ <% end %>
+ <% end %>
+ </p>
+ <% end %>
-</table>
+ <% if workflow.license_id.nil? %>
+ <p><b>License: </b>No license</p>
+ <% else %>
+ <p><b>License: </b><% @license = License.find(workflow.license_id) %><%= link_to h(@license.title), license_path(@license) %></p>
+ <% end %>
+ <div class="desc">
+ <% unless workflow.image.nil? && workflow.svg.nil? -%>
+ <div class="preview">
+ <%= link_to image_tag(workflow_preview_path(workflow, 'thumb'), :class => 'framed_nospace'), workflow_path(workflow) %>
+ </div>
+ <% end -%>
+ <% if workflow.body and workflow.body.length > 0 -%>
+ <% desc = truncate(strip_html(workflow.body), :length => 500) -%>
+ <%= query ? highlight_all(desc, query) : desc %>
+ <% else -%>
+ <span class="none_text">No description</span>
+ <% end -%>
+ </div>
+
+ <p>
+ <a href="" workflow_path(workflow) + '#ratings' -%>"><b>Rating: </b><%= number_with_precision(workflow.rating, :precision => 1) %> / 5 (<%= pluralize workflow.ratings.count, 'rating' %>)</a> |
+ <a href="" workflow_path(workflow) + '#versions' -%>"><b>Versions: </b><%= workflow.versions.count %></a> |
+ <a href="" workflow_path(workflow) + '#reviews' -%>"><b>Reviews: </b><%= workflow.reviews.count %></a> |
+ <a href="" workflow_path(workflow) + '#comments' -%>"><b>Comments: </b><%= workflow.comments.count %></a> |
+ <a href="" workflow_path(workflow) + '#citations' -%>"><b>Citations: </b><%= workflow.citations.count %></a>
+ </p>
+
+ <p>
+ <b>Viewed:</b> <%=pluralize workflow.contribution.site_viewings_count, "time" %> |
+ <b>Downloaded:</b> <%=pluralize workflow.contribution.site_downloads_count, "time" %>
+ </p>
+
+ <% unless (tags = workflow.tags).empty? %>
+ <a href="" workflow_path(workflow) + '#tags' -%>"><p><b>Tags</b> (<%=tags.count-%>):</p></a>
+ <div style="display:inline;" class="tags_onesize"><%= tag_cloud_from_collection tags, true %></div>
+ <% else %>
+ <p><i>This Workflow has no tags!</i></p>
+ <% end %>
+ <% end -%>
+ </div>
+ </div>
+ <% end -%>
<% end %>
Modified: branches/events/app/views/workflows/edit_version.rhtml (3490 => 3491)
--- branches/events/app/views/workflows/edit_version.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/workflows/edit_version.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -6,7 +6,7 @@
<% can_edit_anything = title_edit || preview_edit || description_edit %>
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<h1>
Edit Version <%= @viewing_version_number.to_s %>
@@ -61,7 +61,7 @@
<!-- Description -->
<p><b>Description</b></p>
<% if description_edit %>
- <%= fckeditor_textarea(:workflow, :body, :toolbarSet => 'Simple', :width => '500px', :height => '500px') %>
+ <%= text_area_tag('workflow[body]', @viewing_version.body, :width => '500px', :height => '500px', :class => 'ckeditor') -%>
<br />
<% else %>
Modified: branches/events/app/views/workflows/index.rhtml (3490 => 3491)
--- branches/events/app/views/workflows/index.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/workflows/index.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<h1>Workflows</h1>
+<h1><%= context_prefix(@context) -%> Workflows</h1>
<%= render :partial => "content/index" -%>
Modified: branches/events/app/views/workflows/new.rhtml (3490 => 3491)
--- branches/events/app/views/workflows/new.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/workflows/new.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,6 @@
<% t "New" -%>
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<%= _javascript__include_tag "osp.js" %>
<h1>Upload Workflow</h1>
Modified: branches/events/app/views/workflows/new_version.rhtml (3490 => 3491)
--- branches/events/app/views/workflows/new_version.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/workflows/new_version.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,6 @@
<% t "Upload New Version" -%>
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<h1>
Upload New Version
@@ -60,7 +60,7 @@
<center>
<div class="box_form" style="width: 600px; text-align: center;">
- <%= fckeditor_textarea(:new_workflow, "rev_comments", :toolbarSet => 'Basic', :width => '580px', :height => '300px') %>
+ <%= text_area_tag("new_workflow[rev_comments]", nil, :width => '580px', :height => '300px', :class => 'ckeditor') -%>
</div>
</center>
Modified: branches/events/app/views/workflows/show.rhtml (3490 => 3491)
--- branches/events/app/views/workflows/show.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/workflows/show.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,5 +1,7 @@
<% t "#{h @workflow.title} (#{h @workflow.contributor_name}) [#{h(@workflow.type_display_name)} Workflow]" -%>
+<%= render :partial => "workflows/deprecation_event", :collection => @workflow.deprecations -%>
+
<ul class="sectionIcons">
<% if @authorised_to_edit -%>
<li><%= icon('new', new_version_workflow_path(@workflow), nil, nil, 'Upload New Version')%></li>
Modified: branches/events/app/views/workflows/tag_suggestions.rhtml (3490 => 3491)
--- branches/events/app/views/workflows/tag_suggestions.rhtml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/app/views/workflows/tag_suggestions.rhtml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +1,4 @@
-<%= _javascript__include_tag "fckeditor/fckeditor.js" %>
+<%= _javascript__include_tag "ckeditor/ckeditor.js" %>
<%= _javascript__include_tag "tag_suggestions.js" %>
<h1>Extra workflow metadata</h1>
@@ -18,7 +18,7 @@
<!-- Description -->
<p><b>Description</b></p>
- <%= fckeditor_textarea(:workflow, :body, :toolbarSet => 'Simple', :width => '500px', :height => '300px') %>
+ <%= text_area_tag("workflow[body]", nil, :width => '500px', :height => '300px', :class => 'ckeditor') -%>
<% end %>
Copied: branches/events/config/.gitignore (from rev 3490, trunk/config/.gitignore) (0 => 3491)
--- branches/events/config/.gitignore (rev 0)
+++ branches/events/config/.gitignore 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,3 @@
+/database.yml
+/settings.yml
+/captcha.yml
Deleted: branches/events/config/base_schema.xml (3490 => 3491)
--- branches/events/config/base_schema.xml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/config/base_schema.xml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,98 +0,0 @@
-<?xml version="1.0"?>
-<schema>
-
- <table name="contributions">
-
- <column type="integer" name="contributor_id"/>
- <column type="string" name="contributor_type"/>
- <column type="integer" name="contributable_id"/>
- <column type="string" name="contributable_type"/>
- <column type="integer" name="policy_id"/>
- <column type="datetime" name="created_at"/>
- <column type="datetime" name="updated_at"/>
- <column type="integer" name="downloads_count" default="0"/>
- <column type="integer" name="viewings_count" default="0"/>
- <column type="integer" name="site_downloads_count" default="0"/>
- <column type="integer" name="site_viewings_count" default="0"/>
- <column type="float" name="rating"/>
- <column type="float" name="rank"/>
- <column type="string" name="label"/>
- <column type="integer" name="content_type_id"/>
- <column type="integer" name="license_id"/>
- <column type="string" name="layout"/>
-
- <index>
- <column name="contributable_id"/>
- <column name="contributable_type"/>
- </index>
-
- <index>
- <column name="contributor_id"/>
- <column name="contributor_type"/>
- </index>
-
- </table>
-
- <table name="policies">
-
- <column type="integer" name="contributor_id"/>
- <column type="string" name="contributor_type"/>
- <column type="string" name="name"/>
- <column type="datetime" name="created_at"/>
- <column type="datetime" name="updated_at"/>
- <column type="integer" name="share_mode"/>
- <column type="integer" name="update_mode"/>
- <column type="boolean" name="public_view" default="false"/>
- <column type="boolean" name="public_download" default="false"/>
-
- </table>
-
- <table name="downloads">
-
- <column type="integer" name="contribution_id"/>
- <column type="integer" name="user_id"/>
- <column type="datetime" name="created_at"/>
- <column type="string" name="user_agent"/>
- <column type="boolean" name="accessed_from_site" default="false"/>
- <column type="string" name="kind"/>
-
- <index>
- <column name="contribution_id"/>
- </index>
-
- </table>
-
- <table name="content_types">
-
- <column type="integer" name="user_id"/>
- <column type="string" name="title"/>
- <column type="text" name="description"/>
- <column type="text" name="description_html"/>
- <column type="string" name="category"/>
- <column type="string" name="mime_type"/>
- <column type="datetime" name="created_at"/>
- <column type="datetime" name="updated_at"/>
-
- </table>
-
- <table name="user_reports">
-
- <column type="integer" name="user_id"/>
- <column type="string" name="subject_type"/>
- <column type="integer" name="subject_id"/>
- <column type="text" name="content"/>
- <column type="text" name="report"/>
- <column type="datetime" name="created_at"/>
-
- </table>
-
- <table name="previews">
-
- <column type="integer" name="image_blob_id"/>
- <column type="integer" name="svg_blob_id"/>
- <column type="datetime" name="created_at"/>
-
- </table>
-
-</schema>
-
Modified: branches/events/config/database.yml.pre (3490 => 3491)
--- branches/events/config/database.yml.pre 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/config/database.yml.pre 2013-04-03 15:44:21 UTC (rev 3491)
@@ -12,8 +12,8 @@
# And be sure to use new-style password hashing:
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
- adapter: mysql
- database: m2_development
+ adapter: mysql2
+ database: myexperiment_development
username: root
password:
host: localhost
@@ -22,15 +22,15 @@
# re-generated from your development database when you run 'rake'.
# Do not set this db to the same as development or production.
test:
- adapter: mysql
- database: m2_test
+ adapter: mysql2
+ database: myexperiment_test
username: root
password:
host: localhost
production:
- adapter: mysql
- database: m2_production
+ adapter: mysql2
+ database: myexperiment_production
username: root
password:
host: localhost
Modified: branches/events/config/default_settings.yml (3490 => 3491)
--- branches/events/config/default_settings.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/config/default_settings.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -41,7 +41,7 @@
# contributable_models - These are the models for the things that myExperiment
# contributors can contribute.
-contributable_models: [Workflow, Blob, Pack, Blog]
+contributable_models: [Workflow, Blob, Pack]
# page_template - This is the page template for all the pages except for
# the front page of the web site.
@@ -161,10 +161,6 @@
link: /packs
controller: packs
- - label: Services
- link: /services
- controller: services
-
- label: Topics
link: /topics
controller: topics
@@ -532,7 +528,7 @@
joins:
- workflow_processors: INNER JOIN workflow_processors ON RESULT_TYPE = 'Workflow' AND workflow_processors.workflow_id = RESULT_ID
+ workflow_processors: INNER JOIN workflow_processors ON RESULT_TYPE = 'Workflow' AND workflow_processors.workflow_id = RESULT_ID AND DOWNLOAD_CONDITIONS = 1
taggings: LEFT OUTER JOIN taggings ON RESULT_TYPE = taggings.taggable_type AND RESULT_ID = taggings.taggable_id
services: INNER JOIN services ON RESULT_TYPE = 'Service' AND RESULT_ID = services.id
curation_events: INNER JOIN curation_events ON curation_events.object_type = RESULT_TYPE AND curation_events.object_id = RESULT_ID
@@ -544,6 +540,7 @@
topic_workflow_map: INNER JOIN topic_workflow_map ON contributions.id = topic_workflow_map.workflow_id
users: INNER JOIN users ON contributions.contributor_type = 'User' AND contributions.contributor_id = users.id
licences: LEFT OUTER JOIN licenses ON contributions.license_id = licenses.id
+ component_profiles: LEFT OUTER JOIN workflows ON RESULT_TYPE = 'Workflow' AND workflows.id = RESULT_ID LEFT OUTER JOIN component_profiles ON workflows.component_profile_id = component_profiles.id
order:
@@ -667,5 +664,20 @@
label_column: services.monitor_label
joins: [services]
+ - query_option: COMPONENT_PROFILE_ID
+ title: component profile
+ id_column: component_profiles.id
+ label_column: component_profiles.name
+ joins: [component_profiles]
+
num_options: ["10", "20", "25", "50", "100"]
+# Shortcut keywords
+# These are special keywords that, when typed into the search box (when 'All' is selected) will instantly jump to a
+# specified page instead of returning a list of search results.
+#
+# Example (when 'biovel' is searched for, it will jump to the group's page):
+#
+# shortcut_keywords:
+# biovel: /groups/643
+#
\ No newline at end of file
Modified: branches/events/config/environment.rb (3490 => 3491)
--- branches/events/config/environment.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/config/environment.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,12 +1,13 @@
# Be sure to restart your server when you modify this file
# Specifies gem version of Rails to use when vendor/rails is not present
-RAILS_GEM_VERSION = '2.3.14' unless defined? RAILS_GEM_VERSION
+RAILS_GEM_VERSION = '2.3.17' unless defined? RAILS_GEM_VERSION
# Bootstrap the Rails environment, frameworks, and default configuration
require File.join(File.dirname(__FILE__), 'boot')
-require 'lib/conf'
+require 'conf'
require 'uri'
+require 'forwardable' # Needed for Sunspot
Rails::Initializer.run do |config|
# Settings in config/environments/* take precedence over those specified here.
@@ -26,7 +27,6 @@
# :all can be used as a placeholder for all plugins not explicitly named
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
config.plugins = [
- :encrypted_strings,
:widgets,
:country_select,
:white_list,
@@ -34,20 +34,12 @@
:acts_as_bookmarkable,
:acts_as_commentable,
:acts_as_rateable,
- :acts_as_solr,
:acts_as_taggable_redux,
:auto_complete,
- :encrypted_attributes,
- :fckeditor,
:headliner,
:oauth,
:oauth_plugin,
- :open_id_authentication,
- :paginating_find,
- :query_stats,
- :recaptcha,
:simile_timeline,
- :structured_data,
:validates_email_veracity_of,
:versioning
]
@@ -77,8 +69,6 @@
# Include your application configuration below
-require 'lib/conf'
-
# SMTP configuration
require 'smtp_tls'
Modified: branches/events/config/environments/production.rb (3490 => 3491)
--- branches/events/config/environments/production.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/config/environments/production.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -4,7 +4,7 @@
# Code is not reloaded between requests
config.cache_classes = true
-config.log_path="log/production.#{Time.new().strftime(fmt='%Y%m%d')}.#{Process.pid}.log"
+config.log_path="log/production.#{Time.new().strftime(fmt='%Y%m%d')}.log"
# Full error reports are disabled and caching is turned on
config.action_controller.consider_all_requests_local = false
Deleted: branches/events/config/initializers/mongrel.rb (3490 => 3491)
--- branches/events/config/initializers/mongrel.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/config/initializers/mongrel.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,84 +0,0 @@
-# from https://gist.github.com/826692
-
-if ['2.3.8', '2.3.9', '2.3.10', '2.3.11', '2.3.14'].include?(Rails.version) && Gem.available?('mongrel', '~>1.1.5') && self.class.const_defined?(:Mongrel)
-
- # Pulled right from latest rack. Old looked like this in 1.1.0 version.
- #
- # def [](k)
- # super(@names[k] ||= @names[k.downcase])
- # end
- #
- module Rack
- module Utils
- class HeaderHash < Hash
- def [](k)
- super(@names[k]) if @names[k]
- super(@names[k.downcase])
- end
- end
- end
- end
-
- # Code pulled from the ticket above.
- #
- class Mongrel::CGIWrapper
- def header_with_rails_fix(options = 'text/html')
- @head['cookie'] = options.delete('cookie').flatten.map { |v| v.sub(/^\n/,'') } if options.class != String and options['cookie']
- header_without_rails_fix(options)
- end
- alias_method_chain :header, :rails_fix
- end
-
- # Pulled right from 2.3.8 ActionPack. Simple diff was
- #
- # if headers.include?('Set-Cookie')
- # headers['cookie'] = headers.delete('Set-Cookie').split("\n")
- # end
- #
- # to
- #
- # if headers['Set-Cookie']
- # headers['cookie'] = headers.delete('Set-Cookie').split("\n")
- # end
- #
- module ActionController
- class CGIHandler
- def self.dispatch_cgi(app, cgi, out = $stdout)
- env = cgi.__send__(:env_table)
- env.delete "HTTP_CONTENT_LENGTH"
- cgi.stdinput.extend ProperStream
- env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/"
- env.update({
- "rack.version" => [0,1],
- "rack.input" => cgi.stdinput,
- "rack.errors" => $stderr,
- "rack.multithread" => false,
- "rack.multiprocess" => true,
- "rack.run_once" => false,
- "rack.url_scheme" => ["yes", "on", "1"].include?(env["HTTPS"]) ? "https" : "http"
- })
- env["QUERY_STRING"] ||= ""
- env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
- env["REQUEST_PATH"] ||= "/"
- env.delete "PATH_INFO" if env["PATH_INFO"] == ""
- status, headers, body = app.call(env)
- begin
- out.binmode if out.respond_to?(:binmode)
- out.sync = false if out.respond_to?(:sync=)
- headers['Status'] = status.to_s
- if headers['Set-Cookie']
- headers['cookie'] = headers.delete('Set-Cookie').split("\n")
- end
- out.write(cgi.header(headers))
- body.each { |part|
- out.write part
- out.flush if out.respond_to?(:flush)
- }
- ensure
- body.close if body.respond_to?(:close)
- end
- end
- end
- end
-
-end
Copied: branches/events/config/initializers/open_id_authentication.rb (from rev 3490, trunk/config/initializers/open_id_authentication.rb) (0 => 3491)
--- branches/events/config/initializers/open_id_authentication.rb (rev 0)
+++ branches/events/config/initializers/open_id_authentication.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,2 @@
+require 'open_id_authentication'
+ActionController::Base.send :include, OpenIdAuthentication::ControllerMethods
Copied: branches/events/config/initializers/stringio_patch.rb (from rev 3490, trunk/config/initializers/stringio_patch.rb) (0 => 3491)
--- branches/events/config/initializers/stringio_patch.rb (rev 0)
+++ branches/events/config/initializers/stringio_patch.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,18 @@
+# myExperiment: config/initializers/stringio_patch.rb
+#
+# Copyright (c) 2012 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+if RUBY_VERSION < "1.9.1"
+ class StringIO
+ def readpartial(*args)
+ result = read(*args)
+ if result.nil?
+ raise EOFError
+ else
+ result
+ end
+ end
+ end
+end
+
Copied: branches/events/config/initializers/will_paginate.rb (from rev 3490, trunk/config/initializers/will_paginate.rb) (0 => 3491)
--- branches/events/config/initializers/will_paginate.rb (rev 0)
+++ branches/events/config/initializers/will_paginate.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,12 @@
+# myExperiment: config/initializers/will_paginate.rb
+#
+# Copyright (c) 2013 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+# Set the default entries per page to be 10 in line with the old plugin
+
+require 'will_paginate'
+
+WillPaginate.per_page = 10
+
+
Modified: branches/events/config/routes.rb (3490 => 3491)
--- branches/events/config/routes.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/config/routes.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,47 +1,10 @@
-require 'lib/rest'
+require 'rest'
ActionController::Routing::Routes.draw do |map|
# rest routes
rest_routes(map)
- # LoD routes
- if Conf.rdfgen_enable
-
- map.connect '/:contributable_type/:contributable_id/attributions/:attribution_id.:format',
- :controller => 'linked_data', :action ="" 'attributions', :conditions => { :method => :get }
-
- map.connect '/:contributable_type/:contributable_id/citations/:citation_id.:format',
- :controller => 'linked_data', :action ="" 'citations', :conditions => { :method => :get },
- :requirements => { :citation_id => /[0-9]*/ }
-
- map.connect '/:contributable_type/:contributable_id/comments/:comment_id.:format',
- :controller => 'linked_data', :action ="" 'comments', :conditions => { :method => :get }
-
- map.connect '/:contributable_type/:contributable_id/credits/:credit_id.:format',
- :controller => 'linked_data', :action ="" 'credits', :conditions => { :method => :get }
-
- map.connect '/users/:user_id/favourites/:favourite_id.:format',
- :controller => 'linked_data', :action ="" 'favourites', :conditions => { :method => :get }
-
- map.connect '/packs/:contributable_id/local_pack_entries/:local_pack_entry_id.:format',
- :controller => 'linked_data', :action ="" 'local_pack_entries',
- :contributable_type => 'packs', :conditions => { :method => :get }
-
- map.connect '/packs/:contributable_id/remote_pack_entries/:remote_pack_entry_id.:format',
- :controller => 'linked_data', :action ="" 'remote_pack_entries',
- :contributable_type => 'packs', :conditions => { :method => :get }
-
- map.connect '/:contributable_type/:contributable_id/policies/:policy_id.:format',
- :controller => 'linked_data', :action ="" 'policies', :conditions => { :method => :get }
-
- map.connect '/:contributable_type/:contributable_id/ratings/:rating_id.:format',
- :controller => 'linked_data', :action ="" 'ratings', :conditions => { :method => :get }
-
- map.connect '/tags/:tag_id/taggings/:tagging_id.:format',
- :controller => 'linked_data', :action ="" 'taggings', :conditions => { :method => :get }
- end
-
map.content '/content', :controller => 'content', :action ="" 'index', :conditions => { :method => :get }
map.formatted_content '/content.:format', :controller => 'content', :action ="" 'index', :conditions => { :method => :get }
@@ -69,7 +32,7 @@
map.resources :predicates
# mashup
- map.resource :mashup
+ map.resource :mashup, :controller => 'mashup'
# search
map.resource :search,
@@ -100,6 +63,7 @@
:download => :get,
:quick_add => :post,
:resolve_link => :post,
+ :snapshot => :post,
:items => :get } do |pack|
pack.resources :comments, :collection => { :timeline => :get }
pack.resources :relationships, :collection => { :edit_relationships => :get }
@@ -138,6 +102,10 @@
map.blob_version '/files/:id/versions/:version', :conditions => { :method => :get }, :controller => 'blobs', :action ="" 'show'
map.formatted_blob_version '/files/:id/versions/:version.:format', :conditions => { :method => :get }, :controller => 'blobs', :action ="" 'show'
+ # pack redirect for linked data model
+ map.pack_version '/packs/:id/versions/:version', :conditions => { :method => :get }, :controller => 'packs', :action ="" 'show'
+ map.formatted_pack_version '/packs/:id/versions/:version.:format', :conditions => { :method => :get }, :controller => 'packs', :action ="" 'show'
+
map.blob_version_suggestions '/files/:id/versions/:version/suggestions', :conditions => { :method => :get }, :controller => 'blobs', :action ="" 'suggestions'
map.blob_version_process_suggestions '/files/:id/versions/:version/process_suggestions', :conditions => { :method => :post }, :controller => 'blobs', :action ="" 'process_suggestions'
@@ -182,12 +150,6 @@
blob.resources :comments, :collection => { :timeline => :get }
end
- # blogs
- map.resources :blogs do |blog|
- # blogs have nested posts
- blog.resources :blog_posts
- end
-
# services
map.resources :services, :collection => { :search => :get }
@@ -201,11 +163,11 @@
map.resources :messages, :collection => { :sent => :get, :delete_all_selected => :delete }
# all oauth
- map.oauth '/oauth',:controller=>'oauth',:action=""
map.authorize '/oauth/authorize',:controller=>'oauth',:action=""
map.request_token '/oauth/request_token',:controller=>'oauth',:action=""
map.access_token '/oauth/access_token',:controller=>'oauth',:action=""
map.test_request '/oauth/test_request',:controller=>'oauth',:action=""
+ map.resources :oauth
# User timeline
map.connect 'users/timeline', :controller => 'users', :action ="" 'timeline'
@@ -218,7 +180,7 @@
map.connect 'users/forgot_password', :controller => "users", :action ="" "forgot_password"
map.connect 'users/reset_password/:reset_code', :controller => "users", :action ="" "reset_password"
- [ 'news', 'friends', 'groups', 'workflows', 'files', 'packs', 'forums', 'blogs', 'credits', 'tags', 'favourites' ].each do |tab|
+ [ 'news', 'friends', 'groups', 'forums', 'credits', 'tags', 'favourites' ].each do |tab|
map.connect "users/:id/#{tab}", :controller => 'users', :action ="" tab
end
@@ -247,12 +209,18 @@
# user's reports of inappropriate content
user.resources :reports, :controller => :user_reports
+
+ # user's uploaded resources
+ user.resources :workflows, : :index
+ user.resources :blobs, : :index, :as => :files
+ user.resources :packs, : :index
end
map.resources :networks,
:as => :groups,
:collection => { :all => :get, :search => :get },
- :member => { :invite => :get,
+ :member => { :content => :get,
+ :invite => :get,
:membership_invite => :post,
:membership_invite_external => :post,
:membership_request => :get,
@@ -260,6 +228,12 @@
:tag => :post } do |network|
network.resources :group_announcements, :as => :announcements, :name_prefix => nil
network.resources :comments, :collection => { :timeline => :get }
+ network.resources :policies, :controller => 'group_policies'
+
+ # resources shared with network
+ network.resources :workflows, : :index
+ network.resources :blobs, : :index, :as => :files
+ network.resources :packs, : :index
end
# The priority is based upon order of creation: first created -> highest priority.
@@ -300,6 +274,8 @@
map.resources :licenses
map.resources :license_attributes
+ map.resources :policies, : :show
+
# Generate special alias routes for external sites point to
Conf.external_site_integrations.each_value do |data|
map.connect data["path"], data["redirect"].symbolize_keys #Convert string keys to symbols
@@ -307,6 +283,42 @@
map.connect 'clear_external_site_session_info', :controller => 'application', :action ="" 'clear_external_site_session_info'
+ # LoD routes
+ if Conf.rdfgen_enable
+
+ map.connect '/:contributable_type/:contributable_id/attributions/:attribution_id.:format',
+ :controller => 'linked_data', :action ="" 'attributions', :conditions => { :method => :get }
+
+ map.connect '/:contributable_type/:contributable_id/citations/:citation_id.:format',
+ :controller => 'linked_data', :action ="" 'citations', :conditions => { :method => :get }
+
+ map.connect '/:contributable_type/:contributable_id/comments/:comment_id.:format',
+ :controller => 'linked_data', :action ="" 'comments', :conditions => { :method => :get }
+
+ map.connect '/:contributable_type/:contributable_id/credits/:credit_id.:format',
+ :controller => 'linked_data', :action ="" 'credits', :conditions => { :method => :get }
+
+ map.connect '/users/:user_id/favourites/:favourite_id.:format',
+ :controller => 'linked_data', :action ="" 'favourites', :conditions => { :method => :get }
+
+ map.connect '/packs/:contributable_id/local_pack_entries/:local_pack_entry_id.:format',
+ :controller => 'linked_data', :action ="" 'local_pack_entries',
+ :contributable_type => 'packs', :conditions => { :method => :get }
+
+ map.connect '/packs/:contributable_id/remote_pack_entries/:remote_pack_entry_id.:format',
+ :controller => 'linked_data', :action ="" 'remote_pack_entries',
+ :contributable_type => 'packs', :conditions => { :method => :get }
+
+ map.connect '/:contributable_type/:contributable_id/policies/:policy_id.:format',
+ :controller => 'linked_data', :action ="" 'policies', :conditions => { :method => :get }
+
+ map.connect '/:contributable_type/:contributable_id/ratings/:rating_id.:format',
+ :controller => 'linked_data', :action ="" 'ratings', :conditions => { :method => :get }
+
+ map.connect '/tags/:tag_id/taggings/:tagging_id.:format',
+ :controller => 'linked_data', :action ="" 'taggings', :conditions => { :method => :get }
+ end
+
# Install the default route as the lowest priority.
map.connect ':controller/:action/:id'
end
Copied: branches/events/config/sunspot.yml (from rev 3490, trunk/config/sunspot.yml) (0 => 3491)
--- branches/events/config/sunspot.yml (rev 0)
+++ branches/events/config/sunspot.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,18 @@
+production:
+ solr:
+ hostname: localhost
+ port: 8983
+ log_level: WARNING
+
+development:
+ solr:
+ hostname: localhost
+ port: 8982
+ log_level: INFO
+
+test:
+ solr:
+ hostname: localhost
+ port: 8981
+ log_level: WARNING
+
Modified: branches/events/config/tables.xml
(Binary files differ)
Copied: branches/events/db/migrate/000_removal_of_structured_data.rb (from rev 3490, trunk/db/migrate/000_removal_of_structured_data.rb) (0 => 3491)
--- branches/events/db/migrate/000_removal_of_structured_data.rb (rev 0)
+++ branches/events/db/migrate/000_removal_of_structured_data.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,310 @@
+class RemovalOfStructuredData < ActiveRecord::Migration
+ def self.up
+
+ # Don't create these tables in if the (now removed) structured_data plugin
+ # has already created them.
+
+ return if ActiveRecord::Base.connection.tables.include?("contributions")
+
+ create_table "concept_relations" do |t|
+ t.integer "subject_concept_id"
+ t.string "relation_type"
+ t.integer "object_concept_id"
+ end
+
+ create_table "concepts" do |t|
+ t.datetime "updated_at"
+ t.text "description_html"
+ t.string "phrase"
+ t.text "description"
+ t.integer "vocabulary_id"
+ t.datetime "created_at"
+ end
+
+ create_table "content_types" do |t|
+ t.integer "user_id"
+ t.string "title"
+ t.text "description"
+ t.text "description_html"
+ t.string "mime_type"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "category"
+ end
+
+ create_table "contributions" do |t|
+ t.integer "contributor_id"
+ t.string "contributor_type"
+ t.integer "contributable_id"
+ t.string "contributable_type"
+ t.integer "policy_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "downloads_count", :default => 0
+ t.integer "viewings_count", :default => 0
+ t.float "rating"
+ t.float "rank"
+ t.integer "content_type_id"
+ t.integer "license_id"
+ t.integer "site_downloads_count", :default => 0
+ t.integer "site_viewings_count", :default => 0
+ t.string "label"
+ t.string "layout"
+ end
+
+ add_index "contributions", ["contributable_id", "contributable_type"]
+ add_index "contributions", ["contributor_id", "contributor_type"]
+
+ create_table "downloads" do |t|
+ t.integer "contribution_id"
+ t.integer "user_id"
+ t.datetime "created_at"
+ t.string "user_agent"
+ t.boolean "accessed_from_site", :default => false
+ t.string "kind"
+ end
+
+ add_index :downloads, ["contribution_id"]
+
+ create_table "federation_sources" do |t|
+ t.string "name"
+ end
+
+ create_table "labels" do |t|
+ t.integer "concept_id"
+ t.string "language"
+ t.string "text"
+ t.integer "vocabulary_id"
+ t.string "label_type"
+ end
+
+ create_table "ontologies" do |t|
+ t.string "prefix"
+ t.datetime "updated_at"
+ t.string "uri"
+ t.string "title"
+ t.text "description_html"
+ t.text "description"
+ t.integer "user_id"
+ t.datetime "created_at"
+ end
+
+ create_table "pack_contributable_entries" do |t|
+ t.integer "pack_id", :null => false
+ t.integer "contributable_id", :null => false
+ t.integer "contributable_version"
+ t.string "contributable_type"
+ t.text "comment"
+ t.integer "user_id", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "pack_remote_entries" do |t|
+ t.integer "pack_id", :null => false
+ t.string "title"
+ t.string "uri"
+ t.string "alternate_uri"
+ t.text "comment"
+ t.integer "user_id", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "packs" do |t|
+ t.integer "contributor_id"
+ t.string "contributor_type"
+ t.string "title"
+ t.text "description"
+ t.text "description_html"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "policies" do |t|
+ t.integer "contributor_id"
+ t.string "contributor_type"
+ t.string "name"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "share_mode"
+ t.integer "update_mode"
+ t.boolean "public_download", :default => false
+ t.boolean "public_view", :default => false
+ end
+
+ create_table "predicates" do |t|
+ t.datetime "updated_at"
+ t.string "title"
+ t.text "description_html"
+ t.string "phrase"
+ t.integer "ontology_id"
+ t.text "description"
+ t.text "equivalent_to"
+ t.datetime "created_at"
+ end
+
+ create_table "previews" do |t|
+ t.integer "svg_blob_id"
+ t.integer "image_blob_id"
+ t.datetime "created_at"
+ end
+
+ create_table "relationships" do |t|
+ t.string "objekt_type"
+ t.integer "objekt_id"
+ t.string "subject_type"
+ t.integer "subject_id"
+ t.integer "user_id"
+ t.datetime "created_at"
+ t.integer "context_id"
+ t.integer "predicate_id"
+ t.string "context_type"
+ end
+
+ create_table "service_categories" do |t|
+ t.string "uri"
+ t.datetime "updated_at"
+ t.integer "service_id"
+ t.string "label"
+ t.datetime "retrieved_at"
+ t.datetime "created_at"
+ end
+
+ create_table "service_deployments" do |t|
+ t.string "iso3166_country_code"
+ t.string "city"
+ t.string "submitter_label"
+ t.string "uri"
+ t.datetime "updated_at"
+ t.string "submitter_uri"
+ t.string "country"
+ t.integer "service_id"
+ t.datetime "created"
+ t.integer "service_provider_id"
+ t.string "flag_url"
+ t.string "endpoint"
+ t.datetime "retrieved_at"
+ t.datetime "created_at"
+ end
+
+ create_table "service_providers" do |t|
+ t.string "name"
+ t.string "uri"
+ t.datetime "updated_at"
+ t.text "description"
+ t.datetime "created"
+ t.datetime "retrieved_at"
+ t.datetime "created_at"
+ end
+
+ create_table "service_tags" do |t|
+ t.string "uri"
+ t.datetime "updated_at"
+ t.integer "service_id"
+ t.string "label"
+ t.datetime "retrieved_at"
+ t.datetime "created_at"
+ end
+
+ create_table "service_types" do |t|
+ t.datetime "updated_at"
+ t.integer "service_id"
+ t.string "label"
+ t.datetime "retrieved_at"
+ t.datetime "created_at"
+ end
+
+ create_table "services" do |t|
+ t.string "documentation_uri"
+ t.string "iso3166_country_code"
+ t.string "city"
+ t.string "name"
+ t.string "provider_uri"
+ t.string "submitter_label"
+ t.string "uri"
+ t.datetime "updated_at"
+ t.string "monitor_symbol_url"
+ t.datetime "monitor_last_checked"
+ t.string "monitor_label"
+ t.string "country"
+ t.string "submitter_uri"
+ t.string "monitor_small_symbol_url"
+ t.text "monitor_message"
+ t.text "description"
+ t.string "wsdl"
+ t.datetime "created"
+ t.string "contributor_type"
+ t.integer "contributor_id"
+ t.string "flag_url"
+ t.string "endpoint"
+ t.string "provider_label"
+ t.datetime "retrieved_at"
+ t.datetime "created_at"
+ end
+
+ create_table "topic_feedbacks" do |t|
+ t.integer "score"
+ t.integer "topic_id"
+ t.datetime "submit_dt"
+ t.integer "user_id"
+ end
+
+ create_table "topic_runs" do |t|
+ t.datetime "runtime"
+ t.string "description"
+ end
+
+ create_table "topic_tag_map" do |t|
+ t.integer "topic_id"
+ t.boolean "display_flag"
+ t.integer "tag_id"
+ t.float "probability"
+ end
+
+ create_table "topic_workflow_map" do |t|
+ t.integer "topic_id"
+ t.boolean "display_flag"
+ t.integer "workflow_id"
+ t.float "probability"
+ end
+
+ create_table "topics" do |t|
+ t.string "name"
+ t.integer "orig_run_id"
+ t.integer "run_id"
+ end
+
+ create_table "user_reports" do |t|
+ t.string "subject_type"
+ t.text "content"
+ t.integer "subject_id"
+ t.integer "user_id"
+ t.text "report"
+ t.datetime "created_at"
+ end
+
+ create_table "vocabularies" do |t|
+ t.integer "user_id"
+ t.string "title"
+ t.text "description"
+ t.text "description_html"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "prefix"
+ t.string "uri"
+ end
+
+ create_table "workflow_processors" do |t|
+ t.string "name"
+ t.string "wsdl_operation"
+ t.string "wsdl"
+ t.integer "workflow_id"
+ end
+ end
+
+ def self.down
+ raise ActiveRecord::IrreversibleMigration
+ end
+end
+
Modified: branches/events/db/migrate/075_add_indexes_to_frequently_used_tables.rb (3490 => 3491)
--- branches/events/db/migrate/075_add_indexes_to_frequently_used_tables.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/db/migrate/075_add_indexes_to_frequently_used_tables.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -5,8 +5,8 @@
add_index :workflow_versions, ["workflow_id"], :name => "workflow_versions_workflow_id_index"
- add_index :contributions, ["contributable_id", "contributable_type"], :name => "contributions_contributable_index"
- add_index :contributions, ["contributor_id", "contributor_type"], :name => "contributions_contributor_index"
+# add_index :contributions, ["contributable_id", "contributable_type"], :name => "contributions_contributable_index"
+# add_index :contributions, ["contributor_id", "contributor_type"], :name => "contributions_contributor_index"
add_index :memberships, ["user_id"], :name => "memberships_user_id_index"
add_index :memberships, ["network_id"], :name => "memberships_network_id_index"
@@ -25,8 +25,8 @@
remove_index :workflow_versions, :name => "workflow_versions_workflow_id_index"
- remove_index :contributions, :name => "contributions_contributable_index"
- remove_index :contributions, :name => "contributions_contributor_index"
+# remove_index :contributions, :name => "contributions_contributable_index"
+# remove_index :contributions, :name => "contributions_contributor_index"
remove_index :memberships, :name => "memberships_user_id_index"
remove_index :memberships, :name => "memberships_network_id_index"
Modified: branches/events/db/migrate/086_rename_indexes_to_automatic_names.rb (3490 => 3491)
--- branches/events/db/migrate/086_rename_indexes_to_automatic_names.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/db/migrate/086_rename_indexes_to_automatic_names.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -7,8 +7,8 @@
def self.up
remove_index "bookmarks", :name => "fk_bookmarks_user"
remove_index "comments", :name => "fk_comments_user"
- remove_index "contributions", :name => "contributions_contributable_index"
- remove_index "contributions", :name => "contributions_contributor_index"
+# remove_index "contributions", :name => "contributions_contributable_index"
+# remove_index "contributions", :name => "contributions_contributor_index"
remove_index "friendships", :name => "friendships_friend_id_index"
remove_index "friendships", :name => "friendships_user_id_index"
remove_index "memberships", :name => "memberships_network_id_index"
Deleted: branches/events/db/migrate/097_add_activities.rb (3490 => 3491)
--- branches/events/db/migrate/097_add_activities.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/db/migrate/097_add_activities.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,32 +0,0 @@
-# myExperiment: db/migrate/097_add_activities.rb
-#
-# Copyright (c) 2012 University of Manchester and the University of Southampton.
-# See license.txt for details.
-
-class AddActivities < ActiveRecord::Migration
- def self.up
- create_table :activities do |t|
-
- t.string :subject_type
- t.integer :subject_id
- t.string :subject_label
-
- t.string :action
-
- t.string :objekt_type
- t.integer :objekt_id
- t.string :objekt_label
-
- t.string :auth_type
- t.integer :auth_id
-
- t.string :extra
-
- t.datetime :created_at
- end
- end
-
- def self.down
- drop_table :activities
- end
-end
Copied: branches/events/db/migrate/098_create_pack_versions.rb (from rev 3490, trunk/db/migrate/098_create_pack_versions.rb) (0 => 3491)
--- branches/events/db/migrate/098_create_pack_versions.rb (rev 0)
+++ branches/events/db/migrate/098_create_pack_versions.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,33 @@
+# myExperiment: db/migrate/097_create_pack_versions.rb
+#
+# Copyright (c) 2012 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+class CreatePackVersions < ActiveRecord::Migration
+
+ def self.up
+ create_table :pack_versions do |t|
+ t.integer "pack_id"
+ t.integer "version"
+ t.text "revision_comments"
+ t.string "title"
+ t.text "description"
+ t.text "description_html"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_column :packs, :current_version, :integer
+ add_column :pack_contributable_entries, :version, :integer
+ add_column :pack_remote_entries, :version, :integer
+ end
+
+ def self.down
+ remove_column :packs, :current_version
+ remove_column :pack_contributable_entries, :version
+ remove_column :pack_remote_entries, :version
+
+ drop_table :pack_versions
+ end
+end
+
Copied: branches/events/db/migrate/099_add_activities.rb (from rev 3490, branches/events/db/migrate/097_add_activities.rb) (0 => 3491)
--- branches/events/db/migrate/099_add_activities.rb (rev 0)
+++ branches/events/db/migrate/099_add_activities.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,32 @@
+# myExperiment: db/migrate/097_add_activities.rb
+#
+# Copyright (c) 2012 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+class AddActivities < ActiveRecord::Migration
+ def self.up
+ create_table :activities do |t|
+
+ t.string :subject_type
+ t.integer :subject_id
+ t.string :subject_label
+
+ t.string :action
+
+ t.string :objekt_type
+ t.integer :objekt_id
+ t.string :objekt_label
+
+ t.string :auth_type
+ t.integer :auth_id
+
+ t.string :extra
+
+ t.datetime :created_at
+ end
+ end
+
+ def self.down
+ drop_table :activities
+ end
+end
Copied: branches/events/db/migrate/20121107095856_create_wsdl_deprecations.rb (from rev 3490, trunk/db/migrate/20121107095856_create_wsdl_deprecations.rb) (0 => 3491)
--- branches/events/db/migrate/20121107095856_create_wsdl_deprecations.rb (rev 0)
+++ branches/events/db/migrate/20121107095856_create_wsdl_deprecations.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,14 @@
+class CreateWsdlDeprecations < ActiveRecord::Migration
+ def self.up
+ create_table :wsdl_deprecations do |t|
+ t.string :wsdl
+ t.datetime :deprecated_at
+ t.text :details
+ t.timestamps
+ end
+ end
+
+ def self.down
+ drop_table :wsdl_deprecations
+ end
+end
Copied: branches/events/db/migrate/20121112133419_change_wsdl_deprecations.rb (from rev 3490, trunk/db/migrate/20121112133419_change_wsdl_deprecations.rb) (0 => 3491)
--- branches/events/db/migrate/20121112133419_change_wsdl_deprecations.rb (rev 0)
+++ branches/events/db/migrate/20121112133419_change_wsdl_deprecations.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,17 @@
+class ChangeWsdlDeprecations < ActiveRecord::Migration
+ def self.up
+ add_column :wsdl_deprecations, :deprecation_event_id, :integer
+ remove_column :wsdl_deprecations, :details
+ remove_column :wsdl_deprecations, :deprecated_at
+ remove_column :wsdl_deprecations, :created_at
+ remove_column :wsdl_deprecations, :updated_at
+ end
+
+ def self.down
+ remove_column :wsdl_deprecations, :deprecation_event_id
+ add_column :wsdl_deprecations, :details, :text
+ add_column :wsdl_deprecations, :deprecated_at, :datetime
+ add_column :wsdl_deprecations, :created_at, :datetime
+ add_column :wsdl_deprecations, :updated_at, :datetime
+ end
+end
Copied: branches/events/db/migrate/20121112134053_create_deprecation_events.rb (from rev 3490, trunk/db/migrate/20121112134053_create_deprecation_events.rb) (0 => 3491)
--- branches/events/db/migrate/20121112134053_create_deprecation_events.rb (rev 0)
+++ branches/events/db/migrate/20121112134053_create_deprecation_events.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,13 @@
+class CreateDeprecationEvents < ActiveRecord::Migration
+ def self.up
+ create_table :deprecation_events do |t|
+ t.string :title
+ t.datetime :date
+ t.text :details
+ end
+ end
+
+ def self.down
+ drop_table :deprecation_events
+ end
+end
Copied: branches/events/db/migrate/20121126093655_create_semantic_annotations.rb (from rev 3490, trunk/db/migrate/20121126093655_create_semantic_annotations.rb) (0 => 3491)
--- branches/events/db/migrate/20121126093655_create_semantic_annotations.rb (rev 0)
+++ branches/events/db/migrate/20121126093655_create_semantic_annotations.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,14 @@
+class CreateSemanticAnnotations < ActiveRecord::Migration
+ def self.up
+ create_table :semantic_annotations do |t|
+ t.integer :subject_id
+ t.string :subject_type
+ t.string :predicate
+ t.string :object
+ end
+ end
+
+ def self.down
+ drop_table :semantic_annotations
+ end
+end
Copied: branches/events/db/migrate/20121126095828_create_workflow_ports.rb (from rev 3490, trunk/db/migrate/20121126095828_create_workflow_ports.rb) (0 => 3491)
--- branches/events/db/migrate/20121126095828_create_workflow_ports.rb (rev 0)
+++ branches/events/db/migrate/20121126095828_create_workflow_ports.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,13 @@
+class CreateWorkflowPorts < ActiveRecord::Migration
+ def self.up
+ create_table :workflow_ports do |t|
+ t.string :name
+ t.string :port_type
+ t.integer :workflow_id
+ end
+ end
+
+ def self.down
+ drop_table :workflow_ports
+ end
+end
Copied: branches/events/db/migrate/20130114091326_move_layout_to_policy.rb (from rev 3490, trunk/db/migrate/20130114091326_move_layout_to_policy.rb) (0 => 3491)
--- branches/events/db/migrate/20130114091326_move_layout_to_policy.rb (rev 0)
+++ branches/events/db/migrate/20130114091326_move_layout_to_policy.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,20 @@
+class MoveLayoutToPolicy < ActiveRecord::Migration
+ def self.up
+ # Add column to policies
+ add_column :policies, :layout, :string
+ # Copy values
+ ActiveRecord::Base.record_timestamps = false
+ execute 'UPDATE policies,contributions SET policies.layout = contributions.layout WHERE policies.id = contributions.policy_id'
+ ActiveRecord::Base.record_timestamps = true
+ # Remove column from contributions
+ remove_column :contributions, :layout
+ end
+
+ def self.down
+ add_column :contributions, :layout, :string
+ ActiveRecord::Base.record_timestamps = false
+ execute 'UPDATE policies,contributions SET contributions.layout = policies.layout WHERE policies.id = contributions.policy_id'
+ ActiveRecord::Base.record_timestamps = true
+ remove_column :policies, :layout
+ end
+end
Copied: branches/events/db/migrate/20130124144906_remove_blogs.rb (from rev 3490, trunk/db/migrate/20130124144906_remove_blogs.rb) (0 => 3491)
--- branches/events/db/migrate/20130124144906_remove_blogs.rb (rev 0)
+++ branches/events/db/migrate/20130124144906_remove_blogs.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,15 @@
+class RemoveBlogs < ActiveRecord::Migration
+ def self.up
+ drop_table :blogs
+ end
+
+ def self.down
+ create_table :blogs do |t|
+ t.column :contributor_id, :integer
+ t.column :contributor_type, :string
+ t.column :title, :string
+ t.column :created_at, :datetime
+ t.column :updated_at, :datetime
+ end
+ end
+end
Copied: branches/events/db/migrate/20130124144917_remove_blog_posts.rb (from rev 3490, trunk/db/migrate/20130124144917_remove_blog_posts.rb) (0 => 3491)
--- branches/events/db/migrate/20130124144917_remove_blog_posts.rb (rev 0)
+++ branches/events/db/migrate/20130124144917_remove_blog_posts.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,16 @@
+class RemoveBlogPosts < ActiveRecord::Migration
+ def self.up
+ drop_table :blog_posts
+ end
+
+ def self.down
+ create_table :blog_posts do |t|
+ t.column :blog_id, :integer
+ t.column :title, :string
+ t.column :body, :text
+ t.column :created_at, :datetime
+ t.column :updated_at, :datetime
+ t.column :body_html, :text
+ end
+ end
+end
Copied: branches/events/db/migrate/20130215162325_change_runner_passwords.rb (from rev 3490, trunk/db/migrate/20130215162325_change_runner_passwords.rb) (0 => 3491)
--- branches/events/db/migrate/20130215162325_change_runner_passwords.rb (rev 0)
+++ branches/events/db/migrate/20130215162325_change_runner_passwords.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,16 @@
+# myExperiment: db/migrate/20130215162325_change_runner_passwords.rb
+#
+# Copyright (c) 2013 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+class ChangeRunnerPasswords < ActiveRecord::Migration
+ def self.up
+ remove_column :taverna_enactors, :crypted_password
+ add_column :taverna_enactors, :password, :string
+ end
+
+ def self.down
+ add_column :taverna_enactors, :crypted_password, :string
+ remove_column :taverna_enactors, :password
+ end
+end
Copied: branches/events/db/migrate/20130304123620_add_license_id_to_packs.rb (from rev 3490, trunk/db/migrate/20130304123620_add_license_id_to_packs.rb) (0 => 3491)
--- branches/events/db/migrate/20130304123620_add_license_id_to_packs.rb (rev 0)
+++ branches/events/db/migrate/20130304123620_add_license_id_to_packs.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,9 @@
+class AddLicenseIdToPacks < ActiveRecord::Migration
+ def self.up#
+ add_column :packs, :license_id, :integer
+ end
+
+ def self.down
+ remove_column :packs, :license_id
+ end
+end
Copied: branches/events/db/migrate/20130308084600_remove_key_type_from_client_applications.rb (from rev 3490, trunk/db/migrate/20130308084600_remove_key_type_from_client_applications.rb) (0 => 3491)
--- branches/events/db/migrate/20130308084600_remove_key_type_from_client_applications.rb (rev 0)
+++ branches/events/db/migrate/20130308084600_remove_key_type_from_client_applications.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,9 @@
+class RemoveKeyTypeFromClientApplications < ActiveRecord::Migration
+ def self.up
+ remove_column :client_applications, :key_type
+ end
+
+ def self.down
+ add_column :client_applications, :key_type, :string
+ end
+end
Copied: branches/events/db/migrate/20130308085716_remove_creator_id_from_client_applications.rb (from rev 3490, trunk/db/migrate/20130308085716_remove_creator_id_from_client_applications.rb) (0 => 3491)
--- branches/events/db/migrate/20130308085716_remove_creator_id_from_client_applications.rb (rev 0)
+++ branches/events/db/migrate/20130308085716_remove_creator_id_from_client_applications.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,9 @@
+class RemoveCreatorIdFromClientApplications < ActiveRecord::Migration
+ def self.up
+ remove_column :client_applications, :creator_id
+ end
+
+ def self.down
+ add_column :client_applications, :creator_id, :integer
+ end
+end
Modified: branches/events/db/schema.rb (3490 => 3491)
--- branches/events/db/schema.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/db/schema.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -9,7 +9,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 97) do
+ActiveRecord::Schema.define(:version => 20130308085716) do
create_table "activities", :force => true do |t|
t.string "subject_type"
@@ -88,23 +88,6 @@
t.integer "current_version"
end
- create_table "blog_posts", :force => true do |t|
- t.integer "blog_id"
- t.string "title"
- t.text "body"
- t.datetime "created_at"
- t.datetime "updated_at"
- t.text "body_html"
- end
-
- create_table "blogs", :force => true do |t|
- t.integer "contributor_id"
- t.string "contributor_type"
- t.string "title"
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
create_table "bookmarks", :force => true do |t|
t.string "title", :limit => 50, :default => ""
t.datetime "created_at", :null => false
@@ -115,6 +98,27 @@
add_index "bookmarks", ["user_id"], :name => "index_bookmarks_on_user_id"
+ create_table "checksums", :id => false, :force => true do |t|
+ t.integer "id"
+ t.string "sha1"
+ end
+
+ add_index "checksums", ["id"], :name => "i1", :unique => true
+
+ create_table "checksums_new", :id => false, :force => true do |t|
+ t.integer "id"
+ t.string "sha1"
+ end
+
+ add_index "checksums_new", ["id"], :name => "i1", :unique => true
+
+ create_table "checksums_new_new", :id => false, :force => true do |t|
+ t.integer "id"
+ t.string "sha1"
+ end
+
+ add_index "checksums_new_new", ["id"], :name => "ii", :unique => true
+
create_table "citations", :force => true do |t|
t.integer "user_id"
t.integer "workflow_id"
@@ -139,10 +143,8 @@
t.string "key", :limit => 50
t.string "secret", :limit => 50
t.integer "user_id"
- t.string "key_type"
t.datetime "created_at"
t.datetime "updated_at"
- t.integer "creator_id"
end
add_index "client_applications", ["key"], :name => "index_client_applications_on_key", :unique => true
@@ -209,7 +211,6 @@
t.integer "site_downloads_count", :default => 0
t.integer "site_viewings_count", :default => 0
t.string "label"
- t.string "layout"
end
add_index "contributions", ["contributable_id", "contributable_type"], :name => "index_contributions_on_contributable_id_and_contributable_type"
@@ -235,6 +236,12 @@
t.datetime "updated_at"
end
+ create_table "deprecation_events", :force => true do |t|
+ t.string "title"
+ t.datetime "date"
+ t.text "details"
+ end
+
create_table "downloads", :force => true do |t|
t.integer "contribution_id"
t.integer "user_id"
@@ -432,6 +439,7 @@
t.integer "user_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
+ t.integer "version"
end
create_table "pack_remote_entries", :force => true do |t|
@@ -443,8 +451,20 @@
t.integer "user_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
+ t.integer "version"
end
+ create_table "pack_versions", :force => true do |t|
+ t.integer "pack_id"
+ t.integer "version"
+ t.text "revision_comments"
+ t.string "title"
+ t.text "description"
+ t.text "description_html"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
create_table "packs", :force => true do |t|
t.integer "contributor_id"
t.string "contributor_type"
@@ -453,6 +473,8 @@
t.text "description_html"
t.datetime "created_at"
t.datetime "updated_at"
+ t.integer "current_version"
+ t.integer "license_id"
end
create_table "pending_invitations", :force => true do |t|
@@ -504,6 +526,7 @@
t.integer "update_mode"
t.boolean "public_download", :default => false
t.boolean "public_view", :default => false
+ t.string "layout"
end
create_table "predicates", :force => true do |t|
@@ -584,6 +607,13 @@
add_index "reviews", ["user_id"], :name => "index_reviews_on_user_id"
+ create_table "semantic_annotations", :force => true do |t|
+ t.integer "subject_id"
+ t.string "subject_type"
+ t.string "predicate"
+ t.string "object"
+ end
+
create_table "service_categories", :force => true do |t|
t.string "uri"
t.datetime "updated_at"
@@ -707,9 +737,9 @@
t.string "contributor_type"
t.string "url"
t.string "username"
- t.string "crypted_password"
t.datetime "created_at"
t.datetime "updated_at"
+ t.string "password"
end
create_table "topic_feedbacks", :force => true do |t|
@@ -798,6 +828,12 @@
t.string "uri"
end
+ create_table "workflow_ports", :force => true do |t|
+ t.string "name"
+ t.string "port_type"
+ t.integer "workflow_id"
+ end
+
create_table "workflow_processors", :force => true do |t|
t.string "name"
t.string "wsdl_operation"
@@ -849,4 +885,9 @@
t.integer "preview_id"
end
+ create_table "wsdl_deprecations", :force => true do |t|
+ t.string "wsdl"
+ t.integer "deprecation_event_id"
+ end
+
end
Deleted: branches/events/go.sh (3490 => 3491)
--- branches/events/go.sh 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/go.sh 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-ruby ./script/server --environment=production --port=80
-
Copied: branches/events/installers/ubuntu/.gitignore (from rev 3490, trunk/installers/ubuntu/.gitignore) (0 => 3491)
--- branches/events/installers/ubuntu/.gitignore (rev 0)
+++ branches/events/installers/ubuntu/.gitignore 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1 @@
+/settings.bash
Copied: branches/events/installers/ubuntu/dependencies.bash (from rev 3490, trunk/installers/ubuntu/dependencies.bash) (0 => 3491)
--- branches/events/installers/ubuntu/dependencies.bash (rev 0)
+++ branches/events/installers/ubuntu/dependencies.bash 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+echo "Installing required packages using apt-get install"
+sudo apt-get update || { echo "Could not update apt-get. Aborting ..."; exit 5; }
+sudo -n apt-get install -y build-essential exim4 git-core curl libcurl3 libcurl3-gnutls libcurl4-gnutls-dev openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev mysql-server libmysqlclient-dev libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion libmagickwand-dev graphviz gcj-jre-headless || { echo "Could not install required using apt-get install. Aborting ..."; exit 6; }
+
Modified: branches/events/installers/ubuntu/install.bash (3490 => 3491)
--- branches/events/installers/ubuntu/install.bash 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/installers/ubuntu/install.bash 2013-04-03 15:44:21 UTC (rev 3491)
@@ -19,9 +19,7 @@
sudo su -c "echo mysql-server-5.1 mysql-server/root_password password `echo "'"``echo ${mysql_root_password}``echo "'"` | debconf-set-selections" || { echo "Could not set debconf option mysql-server-5.1 mysql-server/root_password. Aborting ..."; exit 3; }
sudo su -c "echo mysql-server-5.1 mysql-server/root_password_again password `echo "'"``echo ${mysql_root_password}``echo "'"` | debconf-set-selections" || { echo "Could not set debconf option mysql-server-5.1 mysql-server/root_password_again. Aborting ..."; exit 4; }
-echo "Installing required packages using apt-get install"
-sudo apt-get update || { echo "Could not update apt-get. Aborting ..."; exit 5; }
-sudo -n apt-get install -y build-essential exim4 git-core curl libcurl3 libcurl3-gnutls libcurl4-openssl-dev openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev mysql-server libmysqlclient-dev libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion libmagickwand-dev graphviz gcj-jre-headless || { echo "Could not install required using apt-get install. Aborting ..."; exit 6; }
+source "${basedir}/dependencies.bash"
echo "Installing and configuring RVM"
sudo bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) || { echo "Could not install RVM. Aborting ..."; exit 7; }
Modified: branches/events/lib/account_management.rb (3490 => 3491)
--- branches/events/lib/account_management.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/account_management.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -12,8 +12,6 @@
:announcements => { :owner => :user_id },
:attributions => { :owner => :derived },
:blobs => { :owner => :contributor },
- :blogs => { :owner => :contributor },
- :blog_posts => { :owner => :derived },
:bookmarks => { :owner => :user_id },
:citations => { :owner => :user_id },
:client_applications => { :owner => :user_id },
Modified: branches/events/lib/acts_as_contributable.rb (3490 => 3491)
--- branches/events/lib/acts_as_contributable.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/acts_as_contributable.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -83,6 +83,7 @@
end
def contributor_name
+ return nil if contribution.nil?
return contribution.contributor.name if contribution.contributor.respond_to?('name')
return contribution.contributor.title if contribution.contributor.respond_to?('title')
end
Modified: branches/events/lib/authorization.rb (3490 => 3491)
--- branches/events/lib/authorization.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/authorization.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -48,13 +48,11 @@
user = nil unless user.kind_of?(User)
- is_authorized = false
-
object_type = object.class == Class ? object.name : object.class.name
case object_type
- when "Workflow", "Blog", "Blob", "Pack", "Service", "Contribution"
+ when "Workflow", "Blob", "Pack", "Service", "Contribution"
# workflows can only be created by authenticated users
if (action == "create") && [Workflow, Blob, Pack].include?(object)
@@ -72,9 +70,9 @@
# return the response
case action
- when "view"; return ob.view_permission == "1"
- when "download"; return ob.download_permission == "1"
- when "edit"; return ob.edit_permission == "1"
+ when "view"; return ob.view_permission.to_s == "1"
+ when "download"; return ob.download_permission.to_s == "1"
+ when "edit"; return ob.edit_permission.to_s == "1"
else; return false
end
@@ -82,31 +80,49 @@
case action
when "edit", "destroy"
# check to allow only admin to edit / delete the group
- is_authorized = user && user.network_admin?(object.id)
+ return user && user.network_admin?(object.id)
else
- is_authorized = true
+ return true
end
+ when "PackVersion"
+ case action
+ when "create"
+
+ # If a user can edit a pack, they can create a version of it.
+ is_authorized = Authorization.check('edit', context, user)
+
+ when "view"
+
+ # If a user can view a pack, they can view versions of it.
+ is_authorized = Authorization.check('view', context, user)
+
+ else
+
+ # Editing or deleting versions of a pack is not allowed.
+ is_authorized = false
+ end
+
when "Comment"
case action
when "create"
# Comments can be created by authenticated users that can view the context
- is_authorized = !user.nil? && Authorization.check('view', context, user)
+ return !user.nil? && Authorization.check('view', context, user)
when "destroy"
# Users can delete their own comments. Curators and
# administrators can delete any comment.
- is_authorized = object.user == user || (user && user.admin?) || (user && user.curator?)
+ return object.user == user || (user && user.admin?) || (user && user.curator?)
when "view"
# user can view comment if they can view the item that this comment references
- is_authorized = Authorization.check('view', object.commentable, user)
+ return Authorization.check('view', object.commentable, user)
else
# 'edit' or any other actions are not allowed on comments
- is_authorized = false
+ return false
end
when "Rating"
@@ -114,12 +130,12 @@
when "create"
# Ratings can be created by authenticated users that can view the context
- is_authorized = !user.nil? && Authorization.check('view', context, user)
+ return !user.nil? && Authorization.check('view', context, user)
when "edit", "destroy"
# Users can edit or remove their own ratings
- is_authorized = !user.nil? && object.user == user
+ return !user.nil? && object.user == user
end
when "Tagging"
@@ -127,79 +143,73 @@
when "create"
# Taggings can be created by authenticated users that can view the context
- is_authorized = !user.nil? && Authorization.check('view', context, user)
+ return !user.nil? && Authorization.check('view', context, user)
when "destroy"
# Users can delete their own taggings
- is_authorized = !user.nil? && object.user == user
+ return !user.nil? && object.user == user
end
when "Bookmark"
case action
when "create"
# Bookmarks can be created by authenticated users that can view the context
- is_authorized = !user.nil? && Authorization.check('view', context, user)
+ return !user.nil? && Authorization.check('view', context, user)
when "destroy"
# only the user who created the bookmark can delete it
- is_authorized = object.user == user
+ return object.user == user
when "view"
# everyone can view bookmarks
- is_authorized = true
+ return true
else
# 'edit' or any other actions are not allowed on comments
- is_authorized = false
+ return false
end
when "Experiment"
- if user.nil?
- is_authorized = false
+ return false if user.nil?
+
+ case object.contributor_type.to_s
+ when "User"
+ return object.contributor_id.to_i == user.id.to_i
+ when "Network"
+ return object.contributor.member?(user.id)
else
- case object.contributor_type.to_s
- when "User"
- is_authorized = object.contributor_id.to_i == user.id.to_i
- when "Network"
- is_authorized = object.contributor.member?(user.id)
- else
- is_authorized = false
- end
- end
+ return false
+ end
when "TavernaEnactor", "Runner"
- if user.nil?
- is_authorized = false
- else
- case object.contributor_type.to_s
- when "User"
- is_authorized = object.contributor_id.to_i == user.id.to_i
- when "Network"
- if ['edit', 'destroy'].include?(action.downcase)
- is_authorized = object.contributor.owner?(user.id)
- else
- is_authorized = object.contributor.member?(user.id)
- end
+ return false if user.nil?
+
+ case object.contributor_type.to_s
+ when "User"
+ return object.contributor_id.to_i == user.id.to_i
+ when "Network"
+ if ['edit', 'destroy'].include?(action.downcase)
+ return object.contributor.owner?(user.id)
else
- is_authorized = false
+ return object.contributor.member?(user.id)
end
+ else
+ return false
end
when "Job"
- if user.nil?
- is_authorized = false
+ return false if user.nil?
+
+ case object.experiment.contributor_type.to_s
+ when "User"
+ return object.experiment.contributor_id.to_i == user.id.to_i
+ when "Network"
+ return object.experiment.contributor.member?(user.id)
else
- case object.experiment.contributor_type.to_s
- when "User"
- is_authorized = object.experiment.contributor_id.to_i == user.id.to_i
- when "Network"
- is_authorized = object.experiment.contributor.member?(user.id)
- else
- is_authorized = false
- end
- end
+ return false
+ end
when "ContentType"
@@ -207,15 +217,15 @@
when "view"
# anyone can view content types
- is_authorized = true
+ return true
when "edit"
# the owner of the content type can edit
- is_authorized = !user.nil? && object.user == user
+ return !user.nil? && object.user == user
when "destroy"
# noone can destroy them yet - they just fade away from view
- is_authorized = false
+ return false
end
when "User"
@@ -224,15 +234,15 @@
when "view"
# everyone can view users
- is_authorized = true
+ return true
when "edit"
# the owner of a user record can edit
- is_authorized = !user.nil? && user == object
+ return !user.nil? && user == object
when "destroy"
# only adminstrators can delete accounts at present
- is_authorized = user && user.admin?
+ return user && user.admin?
end
when "Picture"
@@ -244,16 +254,16 @@
return true if object.owner == user
# anyone can view a user's selected pictures
- is_authorized = object.selected?
+ return object.selected?
when "edit", "destroy"
# only the owner of a picture can edit/destroy
- is_authorized = object.owner == user
+ return object.owner == user
end
when "ClientApplication"
- is_authorized = object.user == user
+ return object.user == user
when "Ontology"
@@ -261,15 +271,15 @@
when "create"
# Authenticated users can create ontologies
- is_authorized = !user.nil?
+ return !user.nil?
when "view"
# All users can view
- is_authorized = true
+ return true
when "edit", "destroy"
# Users can edit and destroy their own ontologies
- is_authorized = object.user == user
+ return object.user == user
end
when "Predicate"
@@ -285,11 +295,11 @@
when "view"
# All users can view predicates
- is_authorized = true
+ return true
else
# All other predicate permissions are inherited from the ontology
- is_authorized = Authorization.check('edit', object.ontology, user)
+ return Authorization.check('edit', object.ontology, user)
end
when "Relationship"
@@ -305,11 +315,11 @@
when "view"
# Users that can view the context can view the relationship
- is_authorized = Authorization.check('view', object.context, user)
+ return Authorization.check('view', object.context, user)
else
# All other relationship permissions depend on edit access to the context
- is_authorized = Authorization.check('edit', object.context, user)
+ return Authorization.check('edit', object.context, user)
end
when "PackContributableEntry", "PackRemoteEntry"
@@ -325,7 +335,7 @@
when "edit", "destroy"
# Users that can edit the pack can also edit / delete items
- is_authorized = Authorization.check('edit', object.pack, user)
+ return Authorization.check('edit', object.pack, user)
end
@@ -333,7 +343,8 @@
# don't recognise the kind of object that is being authorized, so
# we don't specifically know that it needs to be blocked;
# therefore, allow any actions on it
- is_authorized = true
+
+ return true
end
is_authorized
@@ -436,9 +447,14 @@
select_parts << "#{model.table_name}.*" if include_permissions
if include_permissions || permissions_only
- select_parts << "BIT_OR(#{view_conditions(user_id, friends, networks)}) AS view_permission"
- select_parts << "BIT_OR(#{download_conditions(user_id, friends, networks)}) AS download_permission"
- select_parts << "BIT_OR(#{edit_conditions(user_id, friends, networks)}) AS edit_permission"
+
+ view_conditions = view_conditions(user_id, friends, networks)
+ download_conditions = download_conditions(user_id, friends, networks)
+ edit_conditions = edit_conditions(user_id, friends, networks)
+
+ select_parts << "BIT_OR(#{view_conditions}) AS view_permission"
+ select_parts << "BIT_OR(#{download_conditions}) AS download_permission"
+ select_parts << "BIT_OR(#{edit_conditions}) AS edit_permission"
end
opts[:select] = select_parts.join(", ") unless select_parts.empty?
@@ -446,7 +462,23 @@
opts[:group] ||= 'contributions.contributable_type, contributions.contributable_id'
opts[:joins] = joins
- model.scoped(opts)
+ scope = model.scoped(opts) do
+ def permission_conditions
+ @permission_conditions
+ end
+
+ def permission_conditions=(permission_conditions)
+ @permission_conditions = permission_conditions
+ end
+ end
+
+ scope.permission_conditions = {
+ :view_conditions => view_conditions,
+ :download_conditions => download_conditions,
+ :edit_conditions => edit_conditions
+ }
+
+ scope
end
end
Modified: branches/events/lib/conf.rb (3490 => 3491)
--- branches/events/lib/conf.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/conf.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -254,6 +254,10 @@
self.model_alias_convert(self.model_aliases.invert, str)
end
+ def self.shortcut_keywords
+ self.fetch_entry('shortcut_keywords') || {}
+ end
+
private
def self.model_alias_convert(map, str)
Modified: branches/events/lib/country_codes.rb (3490 => 3491)
--- branches/events/lib/country_codes.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/country_codes.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,6 +1,7 @@
module CountryCodes
@@codes = Hash.new
File.open('config/countries.tab').each do |record|
+ record = record.force_encoding('iso-8859-1') if RUBY_VERSION > "1.8.7"
parts = record.split("\t")
@@codes[parts[0]] = parts[1].strip
end
@@ -25,4 +26,4 @@
def self.valid_code?(code)
@@codes.key?(code)
end
-end
\ No newline at end of file
+end
Modified: branches/events/lib/maintenance/backup.rb (3490 => 3491)
--- branches/events/lib/maintenance/backup.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/maintenance/backup.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -119,8 +119,6 @@
table(:model => Attribution, :filter => true, :auth_object => "attributable")
table(:name => "auto_tables")
table(:model => Blob, :filter => true)
- table(:model => Blog, :no_data => true)
- table(:model => BlogPost, :no_data => true)
table(:model => Bookmark)
table(:model => Citation, :filter => true, :auth_object => "workflow")
table(:model => ClientApplication, :no_data => true)
Copied: branches/events/lib/pivoting.rb (from rev 3490, trunk/lib/pivoting.rb) (0 => 3491)
--- branches/events/lib/pivoting.rb (rev 0)
+++ branches/events/lib/pivoting.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,607 @@
+# Pivot code
+
+TOKEN_UNKNOWN = 0x0000
+TOKEN_AND = 0x0001
+TOKEN_OR = 0x0002
+TOKEN_WORD = 0x0003
+TOKEN_OPEN = 0x0004
+TOKEN_CLOSE = 0x0005
+TOKEN_STRING = 0x0006
+TOKEN_EOS = 0x00ff
+
+NUM_TOKENS = 6
+
+STATE_INITIAL = 0x0000
+STATE_EXPECT_OPEN = 0x0100
+STATE_EXPECT_STR = 0x0200
+STATE_EXPECT_EXPR_END = 0x0300
+STATE_EXPECT_END = 0x0400
+STATE_COMPLETE = 0x0500
+
+def calculate_pivot(opts = {})
+
+ begin
+ expr = parse_filter_expression(opts[:params]["filter"], opts[:pivot_options], :active_filters => opts[:active_filters])
+ rescue Exception => ex
+ if Rails.env == "production"
+ problem = "Problem with query _expression_: #{ex}"
+ else
+ raise ex
+ end
+ end
+
+ pivot = contributions_list(opts[:params], opts[:user], opts[:pivot_options],
+ :model => opts[:model],
+ :auth_type => opts[:auth_type],
+ :auth_id => opts[:auth_id],
+ :group_by => opts[:group_by],
+ :active_filters => opts[:active_filters],
+ :lock_filter => opts[:locked_filters],
+ :search_models => opts[:search_models],
+ :search_limit => opts[:search_limit],
+ :no_pagination => opts[:no_pagination],
+ :filters => expr)
+
+ [pivot, problem]
+end
+
+def parse_filter_expression(expr, pivot_options, opts = {})
+
+ def unescape_string(str)
+ str.match(/^"(.*)"$/)[1].gsub(/\\"/, '"')
+ end
+
+ return nil if expr.nil?
+
+ state = STATE_INITIAL
+ data = ""
+
+ begin
+
+ tokens = expr.match(/^
+
+ \s* (\sAND\s) | # AND operator
+ \s* (\sOR\s) | # OR operator
+ \s* (\w+) | # a non-keyword word
+ \s* (\() | # an open paranthesis
+ \s* (\)) | # a close paranthesis
+ \s* ("(\\.|[^\\"])*") # double quoted string with backslash escapes
+
+ /ix)
+
+ if tokens.nil?
+ token = TOKEN_UNKNOWN
+ else
+ (1..NUM_TOKENS).each do |i|
+ token = i if tokens[i]
+ end
+ end
+
+ if token == TOKEN_UNKNOWN
+ token = TOKEN_EOS if expr.strip.empty?
+ end
+
+ case state | token
+ when STATE_INITIAL | TOKEN_WORD ; state = STATE_EXPECT_OPEN ; data << { :name => tokens[0], :expr => [] }
+ when STATE_EXPECT_OPEN | TOKEN_OPEN ; state = STATE_EXPECT_STR
+ when STATE_EXPECT_STR | TOKEN_STRING ; state = STATE_EXPECT_EXPR_END ; data.last[:expr] << tokens[0]
+ when STATE_EXPECT_EXPR_END | TOKEN_AND ; state = STATE_EXPECT_STR ; data.last[:expr] << :and
+ when STATE_EXPECT_EXPR_END | TOKEN_OR ; state = STATE_EXPECT_STR ; data.last[:expr] << :or
+ when STATE_EXPECT_EXPR_END | TOKEN_CLOSE ; state = STATE_EXPECT_END
+ when STATE_EXPECT_END | TOKEN_AND ; state = STATE_INITIAL ; data << :and
+ when STATE_EXPECT_END | TOKEN_OR ; state = STATE_INITIAL ; data << :or
+ when STATE_EXPECT_END | TOKEN_EOS ; state = STATE_COMPLETE
+
+ else raise "Error parsing query _expression_"
+ end
+
+ expr = tokens.post_match unless state == STATE_COMPLETE
+
+ end while state != STATE_COMPLETE
+
+ # validate and reduce expressions to current capabilities
+
+ valid_filters = pivot_options["filters"].map do |f| f["query_option"] end
+ valid_filters = valid_filters.select do |f| opts[:active_filters].include?(f) end
+
+ data.each do |category|
+ case category
+ when :or
+ raise "Unsupported query _expression_"
+ when :and
+ # Fine
+ else
+ raise "Unknown filter category" unless valid_filters.include?(category[:name])
+
+ counts = { :and => 0, :or => 0 }
+
+ category[:expr].each do |bit|
+ counts[bit] = counts[bit] + 1 if bit.class == Symbol
+ end
+
+ raise "Unsupported query _expression_" if counts[:and] > 0 && counts[:or] > 0
+
+ # haven't implemented 'and' within a particular filter yet
+ raise "Unsupported query _expression_" if counts[:and] > 0
+
+ if category[:expr].length == 1
+ category[:expr] = { :terms => [unescape_string(category[:expr].first)] }
+ else
+ category[:expr] = {
+ :operator => category[:expr][1],
+ :terms => category[:expr].select do |t|
+ t.class == String
+ end.map do |t|
+ unescape_string(t)
+ end
+ }
+ end
+ end
+ end
+
+ data
+end
+
+def contributions_list(params = nil, user = nil, pivot_options = nil, opts = {})
+
+ def escape_sql(str)
+ str.gsub(/\\/, '\&\&').gsub(/'/, "''")
+ end
+
+ def build_url(params, opts, expr, parts, pivot_options, extra = {})
+
+ query = {}
+
+ if parts.include?(:filter)
+ bits = []
+ pivot_options["filters"].each do |filter|
+ if !opts[:lock_filter] || opts[:lock_filter][filter["query_option"]].nil?
+ if find_filter(expr, filter["query_option"])
+ bits << filter["query_option"] + "(\"" + find_filter(expr, filter["query_option"])[:expr][:terms].map do |t| t.gsub(/"/, '\"') end.join("\" OR \"") + "\")"
+ end
+ end
+ end
+
+ if bits.length > 0
+ query["filter"] = bits.join(" AND ")
+ end
+ end
+
+ query["query"] = params[:query] if params[:query]
+ query["order"] = params[:order] if parts.include?(:order)
+ query["filter_query"] = params[:filter_query] if parts.include?(:filter_query)
+
+ query.merge!(extra)
+
+ query
+ end
+
+ def comparison(lhs, rhs)
+ if rhs.length == 1
+ "#{lhs} = '#{escape_sql(rhs.first)}'"
+ else
+ "#{lhs} IN ('#{rhs.map do |bit| escape_sql(bit) end.join("', '")}')"
+ end
+ end
+
+ def create_search_results_table(search_query, opts)
+
+ begin
+
+ search_results = Sunspot.search opts[:search_models] do
+ fulltext search_query
+ adjust_solr_params { |p| p[:defType] = 'edismax' }
+ paginate :page => 1, :per_page => opts[:search_limit]
+ end
+
+ rescue
+ return false
+ end
+
+ conn = ActiveRecord::Base.connection
+
+ conn.execute("CREATE TEMPORARY TABLE search_results (id INT AUTO_INCREMENT UNIQUE KEY, result_type VARCHAR(255), result_id INT)")
+
+ # This next part converts the search results to an SQL "VALUES" clause
+ #
+ # e.g. "(NULL, 'Workflow', '4'), (NULL, 'Pack', '6'), ..."
+
+ if search_results.results.length > 0
+ values = search_results.results.map do |result|
+ "(NULL, '#{result.class.name}', '#{result.id}')"
+ end.join(", ")
+
+ conn.execute("INSERT INTO search_results VALUES #{values}")
+ end
+
+ true
+ end
+
+ def drop_search_results_table
+ ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS search_results")
+ end
+
+ def column(column, opts)
+ if column == :auth_type
+ opts[:auth_type]
+ else
+ column
+ end
+ end
+
+ def calculate_filter(collection, params, filter, pivot_options, user, opts = {})
+
+ # apply all the joins and conditions except for the current filter
+
+ joins = []
+ conditions = []
+
+ pivot_options["filters"].each do |other_filter|
+ if filter_list = find_filter(opts[:filters], other_filter["query_option"])
+ unless opts[:inhibit_other_conditions]
+ conditions << comparison(column(other_filter["id_column"], opts), filter_list[:expr][:terms]) unless other_filter == filter
+ end
+ joins += other_filter["joins"] if other_filter["joins"]
+ end
+ end
+
+ filter_id_column = column(filter["id_column"], opts)
+ filter_label_column = column(filter["label_column"], opts)
+
+ joins += filter["joins"] if filter["joins"]
+ conditions << "#{filter_id_column} IS NOT NULL" if filter["not_null"]
+
+ unless opts[:inhibit_filter_query]
+ if params[:filter_query]
+ conditions << "(#{filter_label_column} LIKE '%#{escape_sql(params[:filter_query])}%')"
+ end
+ end
+
+ current = find_filter(opts[:filters], filter["query_option"]) ? find_filter(opts[:filters], filter["query_option"])[:expr][:terms] : []
+
+ if opts[:ids].nil?
+ limit = 10
+ else
+ conditions << "(#{filter_id_column} IN ('#{opts[:ids].map do |id| escape_sql(id) end.join("','")}'))"
+ limit = nil
+ end
+
+ conditions = conditions.length.zero? ? nil : conditions.join(" AND ")
+
+ count_expr = "COUNT(DISTINCT #{opts[:auth_type]}, #{opts[:auth_id]})"
+
+ objects = collection.find(
+ :all,
+ :select => "#{filter_id_column} AS filter_id, #{filter_label_column} AS filter_label, #{count_expr} AS filter_count",
+ :joins => merge_joins(joins, pivot_options, collection.permission_conditions, :auth_type => opts[:auth_type], :auth_id => opts[:auth_id]),
+ :conditions => conditions,
+ :group => "#{filter_id_column}",
+ :limit => limit,
+ :order => "#{count_expr} DESC, #{filter_label_column}")
+
+ objects = objects.select do |x| !x[:filter_id].nil? end
+
+ objects = objects.map do |object|
+
+ value = object.filter_id.to_s
+ selected = current.include?(value)
+
+ label_expr = deep_clone(opts[:filters])
+ label_expr -= [find_filter(label_expr, filter["query_option"])] if find_filter(label_expr, filter["query_option"])
+
+ unless selected && current.length == 1
+ label_expr << { :name => filter["query_option"], :expr => { :terms => [value] } }
+ end
+
+ checkbox_expr = deep_clone(opts[:filters])
+
+ if expr_filter = find_filter(checkbox_expr, filter["query_option"])
+
+ if selected
+ expr_filter[:expr][:terms] -= [value]
+ else
+ expr_filter[:expr][:terms] += [value]
+ end
+
+ checkbox_expr -= [expr_filter] if expr_filter[:expr][:terms].empty?
+
+ else
+ checkbox_expr << { :name => filter["query_option"], :expr => { :terms => [value] } }
+ end
+
+ label_uri = build_url(params, opts, label_expr, [:filter, :order], pivot_options, "page" => nil)
+
+ checkbox_uri = build_url(params, opts, checkbox_expr, [:filter, :order], pivot_options, "page" => nil)
+
+ label = object.filter_label.clone
+ label = visible_name(label) if filter["visible_name"]
+ label = label.capitalize if filter["capitalize"]
+
+ plain_label = object.filter_label
+
+ if params[:filter_query]
+ label = label.sub(Regexp.new("(#{params[:filter_query]})", Regexp::IGNORECASE), '<b>\1</b>')
+ end
+
+ {
+ :object => object,
+ :value => value,
+ :label => label,
+ :plain_label => plain_label,
+ :count => object.filter_count,
+ :checkbox_uri => checkbox_uri,
+ :label_uri => label_uri,
+ :selected => selected
+ }
+ end
+
+ [current, objects]
+ end
+
+ def calculate_filters(collection, params, opts, pivot_options, user)
+
+ # produce the filter list
+
+ filters = deep_clone(pivot_options["filters"])
+ cancel_filter_query_url = nil
+
+ filters.each do |filter|
+
+ # calculate the top n items of the list
+
+ filter[:current], filter[:objects] = calculate_filter(collection, params, filter, pivot_options, user, opts)
+
+ # calculate which active filters are missing (because they weren't in the
+ # top part of the list or have a count of zero)
+
+ missing_filter_ids = filter[:current] - filter[:objects].map do |ob| ob[:value] end
+
+ if missing_filter_ids.length > 0
+ filter[:objects] += calculate_filter(collection, params, filter, pivot_options, user, opts.merge(:ids => missing_filter_ids))[1]
+ end
+
+ # calculate which active filters are still missing (because they have a
+ # count of zero)
+
+ missing_filter_ids = filter[:current] - filter[:objects].map do |ob| ob[:value] end
+
+ if missing_filter_ids.length > 0
+ zero_list = calculate_filter(collection, params, filter, pivot_options, user, opts.merge(:ids => missing_filter_ids, :inhibit_other_conditions => true))[1]
+
+ zero_list.each do |x| x[:count] = 0 end
+
+ zero_list.sort! do |a, b| a[:label] <=> b[:label] end
+
+ filter[:objects] += zero_list
+ end
+ end
+
+ [filters, cancel_filter_query_url]
+ end
+
+ def find_filter(filters, name)
+ filters.find do |f|
+ f[:name] == name
+ end
+ end
+
+ def merge_joins(joins, pivot_options, permission_conditions, opts = {})
+ if joins.length.zero?
+ nil
+ else
+ joins.uniq.map do |j|
+ text = pivot_options["joins"][j].clone
+ text.gsub!(/RESULT_TYPE/, opts[:auth_type])
+ text.gsub!(/RESULT_ID/, opts[:auth_id])
+ text.gsub!(/VIEW_CONDITIONS/, permission_conditions[:view_conditions])
+ text.gsub!(/DOWNLOAD_CONDITIONS/, permission_conditions[:download_conditions])
+ text.gsub!(/EDIT_CONDITIONS/, permission_conditions[:edit_conditions])
+ text
+ end.join(" ")
+ end
+ end
+
+ pivot_options["filters"] = pivot_options["filters"].select do |f|
+ opts[:active_filters].include?(f["query_option"])
+ end
+
+ joins = []
+ conditions = []
+
+ # parse the filter _expression_ if provided. convert filter _expression_ to
+ # the old format. this will need to be replaced eventually
+
+ opts[:filters] ||= []
+
+ include_reset_url = opts[:filters].length > 0
+
+ # filter out top level logic operators for now
+
+ opts[:filters] = opts[:filters].select do |bit|
+ bit.class == Hash
+ end
+
+ # apply locked filters
+
+ if opts[:lock_filter]
+ opts[:lock_filter].each do |filter, value|
+ opts[:filters] << { :name => filter, :expr => { :terms => [value] } }
+ end
+ end
+
+ # perform search if requested
+
+ query_problem = false
+
+ if params["query"]
+ drop_search_results_table
+ if !create_search_results_table(params["query"], opts)
+ params["query"] = nil
+ query_problem = true
+ end
+ end
+
+ if params[:query]
+ klass = SearchResult
+ auth_type = "search_results.result_type"
+ auth_id = "search_results.result_id"
+ group_by = "search_results.result_type, search_results.result_id"
+ else
+ klass = opts[:model] || Contribution
+ auth_type = opts[:auth_type] || "contributions.contributable_type"
+ auth_id = opts[:auth_id] || "contributions.contributable_id"
+ group_by = opts[:group_by] || "contributions.contributable_type, contributions.contributable_id"
+ end
+
+ # determine joins, conditions and order for the main results
+
+ pivot_options["filters"].each do |filter|
+ if filter_list = find_filter(opts[:filters], filter["query_option"])
+ conditions << comparison(column(filter["id_column"], opts.merge( { :auth_type => auth_type, :auth_id => auth_id } )), filter_list[:expr][:terms])
+ joins += filter["joins"] if filter["joins"]
+ end
+ end
+
+ order_options = pivot_options["order"].find do |x|
+ x["option"] == params[:order]
+ end
+
+ order_options ||= pivot_options["order"].first
+
+ joins += order_options["joins"] if order_options["joins"]
+
+ having_bits = []
+
+# pivot_options["filters"].each do |filter|
+# if params["and_#{filter["query_option"]}"]
+# having_bits << "GROUP_CONCAT(DISTINCT #{filter["id_column"]} ORDER BY #{filter["id_column"]}) = \"#{escape_sql(opts[:filters][filter["query_option"]])}\""
+# end
+# end
+
+ having_clause = ""
+
+ if having_bits.length > 0
+ having_clause = "HAVING #{having_bits.join(' AND ')}"
+ end
+
+ # perform the results query
+
+ collection = Authorization.scoped(klass,
+ :authorised_user => user,
+ :include_permissions => true,
+ :auth_type => auth_type,
+ :auth_id => auth_id)
+
+ result_options = {:joins => merge_joins(joins, pivot_options, collection.permission_conditions, :auth_type => auth_type, :auth_id => auth_id),
+ :conditions => conditions.length.zero? ? nil : conditions.join(" AND "),
+ :group => "#{group_by} #{having_clause}",
+ :order => order_options["order"]}
+
+ results = collection.find(:all, result_options)
+
+ unless opts[:no_pagination]
+ results = results.paginate(:page => params["page"], :per_page => params["num"] ? params["num"].to_i : nil)
+ end
+
+ # produce a query hash to match the current filters
+
+ opts[:filter_params] = {}
+
+ pivot_options["filters"].each do |filter|
+ if params[filter["query_option"]]
+ next if opts[:lock_filter] && opts[:lock_filter][filter["query_option"]]
+ opts[:filter_params][filter["query_option"]] = params[filter["query_option"]]
+ end
+ end
+
+ # produce the filter list
+
+ opts_for_filter_query = opts.merge( { :auth_type => auth_type,
+ :auth_id => auth_id, :group_by => group_by } )
+
+ filters, cancel_filter_query_url = calculate_filters(collection, params, opts_for_filter_query, pivot_options, user)
+
+ # produce the summary. If a filter query is specified, then we need to
+ # recalculate the filters without the query to get all of them.
+
+ if params[:filter_query]
+ filters2 = calculate_filters(collection, params, opts_for_filter_query.merge( { :inhibit_filter_query => true } ), pivot_options, user)[0]
+ else
+ filters2 = filters
+ end
+
+ summary = ""
+
+ filters2.select do |filter|
+
+ next if opts[:lock_filter] && opts[:lock_filter][filter["query_option"]]
+
+ selected = filter[:objects].select do |x| x[:selected] end
+ current = selected.map do |x| x[:value] end
+
+ if selected.length > 0
+ selected_labels = selected.map do |x|
+
+ expr = deep_clone(opts[:filters])
+
+ f = find_filter(expr, filter["query_option"])
+
+ expr -= f[:expr][:terms] -= [x[:value]]
+ expr -= [f] if f[:expr][:terms].empty?
+
+ x[:plain_label] + ' <a href="" + url_for(build_url(params, opts, expr,
+ [:filter, :filter_query, :order], pivot_options)) +
+ '">' + " <img src='' /></a>"
+
+ end
+
+ bits = selected_labels.map do |label| label end.join(" <i>or</i> ")
+
+ summary << '<span class="filter-in-use"><b>' + filter["title"].capitalize + "</b>: " + bits + "</span> "
+ end
+ end
+
+ if params[:filter_query]
+ cancel_filter_query_url = build_url(params, opts, opts[:filters], [:filter, :order], pivot_options)
+ end
+
+ if include_reset_url
+ reset_filters_url = build_url(params, opts, opts[:filters], [:order], pivot_options)
+ end
+
+ # remove filters that do not help in narrowing down the result set
+
+ filters = filters.select do |filter|
+ if filter[:objects].empty?
+ false
+ elsif opts[:lock_filter] && opts[:lock_filter][filter["query_option"]]
+ false
+ else
+ true
+ end
+ end
+
+ {
+ :results => results,
+ :filters => filters,
+ :reset_filters_url => reset_filters_url,
+ :cancel_filter_query_url => cancel_filter_query_url,
+ :filter_query_url => build_url(params, opts, opts[:filters], [:filter], pivot_options),
+ :summary => summary,
+ :pivot_options => pivot_options,
+ :query_problem => query_problem
+ }
+end
+
+def visible_name(entity)
+ name = entity.class.name
+
+ if Conf.model_aliases.value?(name)
+ Conf.model_aliases.each do |al, model|
+ name = al if name == model
+ end
+ end
+
+ name
+end
+
Modified: branches/events/lib/rest.rb (3490 => 3491)
--- branches/events/lib/rest.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/rest.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -3,10 +3,12 @@
# Copyright (c) 2007 University of Manchester and the University of Southampton.
# See license.txt for details.
-require 'lib/conf'
-require 'lib/excel_xml'
+require 'conf'
+require 'excel_xml'
require 'xml/libxml'
require 'uri'
+require 'pivoting'
+require 'will_paginate'
include LibXML
@@ -36,7 +38,7 @@
rules.map do |method, rules|
next unless rules["Method"] == "GET"
next unless rules["Type"] == "crud"
-
+
result[rules["Model Entity"]] = rules["REST Entity"]
end
end
@@ -74,13 +76,13 @@
message = "Unknown Error"
case code
- when 200: message = "OK"
- when 307: message = "Temporary Redirect"
- when 400: message = "Bad Request"
- when 401: message = "Unauthorized"
- when 403: message = "Forbidden"
- when 404: message = "Not Found"
- when 500: message = "Internal Server Error"
+ when 200; message = "OK"
+ when 307; message = "Temporary Redirect"
+ when 400; message = "Bad Request"
+ when 401; message = "Unauthorized"
+ when 403; message = "Forbidden"
+ when 404; message = "Not Found"
+ when 500; message = "Internal Server Error"
end
if (code >= 300) && (code < 400)
@@ -190,7 +192,11 @@
list_element[key] = value
end
- collection = eval("ob.#{model_data['Accessor'][i]}")
+ if query['version'] and model_data['Versioned'][i] == 'yes'
+ collection = eval(sprintf("ob.find_version(%d).%s", query['version'], model_data['Accessor'][i]))
+ else
+ collection = eval("ob.#{model_data['Accessor'][i]}")
+ end
collection = [collection] if model_data['Encoding'][i] == 'item as list'
@@ -341,7 +347,7 @@
end
def find_entity_name_from_object(ob)
- ob = ob.versioned_resource if ob.respond_to?(:version)
+ ob = ob.versioned_resource if ob.respond_to?(:versioned_resource)
OBJECT_CLASS_TO_ENTITY_NAME[ob.class.name.underscore]
end
@@ -383,6 +389,7 @@
if query['version']
return rest_response(400, :reason => "Object does not support versioning") unless ob.respond_to?('versions')
return rest_response(404, :reason => "Specified version does not exist") if query['version'].to_i < 1
+ return rest_response(404, :reason => "Specified version does not exist") if query['version'].to_i > ob.versions.last.version
end
# Work out which elements to include in the response.
@@ -589,11 +596,10 @@
obs = find_paginated_auth( { :model => model_name.camelize, :find_args => find_args }, limit, page, filters, user) { |args, size, page|
find_args = args[:find_args].clone
- find_args[:page] = { :size => size, :current => page }
- results = eval(args[:model]).find(:all, find_args)
+ results = args[:model].constantize.find(:all, find_args).paginate(:page => page, :per_page => size)
- results unless results.page > results.page_count
+ results unless results.empty?
}
end
@@ -663,8 +669,6 @@
when 'Review'; return workflow_review_url(ob.reviewable, ob)
when 'Comment'; return "#{rest_resource_uri(ob.commentable)}/comments/#{ob.id}"
when 'Bookmark'; return nil
- when 'Blog'; return blog_url(ob)
- when 'BlogPost'; return blog_blog_post_url(ob.blog, ob)
when 'Rating'; return "#{rest_resource_uri(ob.rateable)}/ratings/#{ob.id}"
when 'Tag'; return tag_url(ob)
when 'Picture'; return user_picture_url(ob.owner, ob)
@@ -675,7 +679,7 @@
when 'Experiment'; return experiment_url(ob)
when 'TavernaEnactor'; return runner_url(ob)
when 'Job'; return experiment_job_url(ob.experiment, ob)
- when 'PackContributableEntry'; return ob.contributable ? rest_resource_uri(ob.contributable) : nil
+ when 'PackContributableEntry'; return ob.contributable ? rest_resource_uri(ob.get_contributable_version) : nil
when 'PackRemoteEntry'; return ob.uri
when 'ContentType'; return content_type_url(ob)
when 'License'; return license_url(ob)
@@ -684,11 +688,15 @@
when 'Predicate'; return predicate_url(ob)
when 'Relationship'; return nil
- when 'Creditation'; return nil
- when 'Attribution'; return nil
- when 'Tagging'; return nil
+ when 'Creditation'; return nil
+ when 'Attribution'; return nil
+ when 'Tagging'; return nil
- when 'WorkflowVersion'; return "#{rest_resource_uri(ob.workflow)}?version=#{ob.version}"
+ when 'WorkflowVersion'; return "#{rest_resource_uri(ob.workflow)}?version=#{ob.version}"
+ when 'BlobVersion'; return "#{rest_resource_uri(ob.blob)}?version=#{ob.version}"
+ when 'PackVersion'; return pack_version_url(ob, ob.version)
+
+ when 'Policy'; return policy_url(ob)
end
raise "Class not processed in rest_resource_uri: #{ob.class.to_s}"
@@ -706,8 +714,6 @@
when 'Review'; return "#{base}/review.xml?id=#{ob.id}"
when 'Comment'; return "#{base}/comment.xml?id=#{ob.id}"
when 'Bookmark'; return "#{base}/favourite.xml?id=#{ob.id}"
- when 'Blog'; return "#{base}/blog.xml?id=#{ob.id}"
- when 'BlogPost'; return "#{base}/blog-post.xml?id=#{ob.id}"
when 'Rating'; return "#{base}/rating.xml?id=#{ob.id}"
when 'Tag'; return "#{base}/tag.xml?id=#{ob.id}"
when 'Picture'; return "#{base}/picture.xml?id=#{ob.id}"
@@ -729,10 +735,14 @@
when 'Predicate'; return "#{base}/predicate.xml?id=#{ob.id}"
when 'Relationship'; return "#{base}/relationship.xml?id=#{ob.id}"
- when 'Creditation'; return "#{base}/credit.xml?id=#{ob.id}"
- when 'Attribution'; return nil
+ when 'Creditation'; return "#{base}/credit.xml?id=#{ob.id}"
+ when 'Attribution'; return nil
- when 'WorkflowVersion'; return "#{base}/workflow.xml?id=#{ob.workflow.id}&version=#{ob.version}"
+ when 'WorkflowVersion'; return "#{base}/workflow.xml?id=#{ob.workflow.id}&version=#{ob.version}"
+ when 'BlobVersion'; return "#{base}/file.xml?id=#{ob.blob.id}&version=#{ob.version}"
+ when 'PackVersion'; return "#{base}/pack.xml?id=#{ob.pack.id}&version=#{ob.version}"
+
+ when 'Policy'; return "#{base}/policy.xml?id=#{ob.id}"
end
raise "Class not processed in rest_access_uri: #{ob.class.to_s}"
@@ -757,6 +767,8 @@
when 'PackContributableEntry'; return rest_object_tag_text(ob.contributable)
when 'PackRemoteEntry'; return 'external'
when 'WorkflowVersion'; return 'workflow'
+ when 'BlobVersion'; return 'file'
+ when 'PackVersion'; return 'pack'
when 'Comment'; return 'comment'
when 'Bookmark'; return 'favourite'
when 'ContentType'; return 'type'
@@ -765,6 +777,7 @@
when 'Ontology'; return 'ontology'
when 'Predicate'; return 'predicate'
when 'Relationship'; return 'relationship'
+ when 'Policy'; return 'policy'
end
return 'object'
@@ -789,6 +802,8 @@
when 'PackContributableEntry'; return rest_object_label_text(ob.contributable)
when 'PackRemoteEntry'; return ob.title
when 'WorkflowVersion'; return ob.title
+ when 'BlobVersion'; return ob.title
+ when 'PackVersion'; return ob.title
when 'ContentType'; return ob.title
when 'License'; return ob.title
when 'CurationEvent'; return ob.category
@@ -799,6 +814,7 @@
when 'Review'; return ob.title
when 'Job'; return ob.title
when 'TavernaEnactor'; return ob.title
+ when 'Policy'; return ob.name
end
return ''
@@ -831,8 +847,6 @@
return [User, $1, is_local] if uri.path =~ /^\/users\/([\d]+)$/
return [Review, $1, is_local] if uri.path =~ /^\/[^\/]+\/[\d]+\/reviews\/([\d]+)$/
return [Comment, $1, is_local] if uri.path =~ /^\/[^\/]+\/[\d]+\/comments\/([\d]+)$/
- return [Blog, $1, is_local] if uri.path =~ /^\/blogs\/([\d]+)$/
- return [BlogPost, $1, is_local] if uri.path =~ /^\/blogs\/[\d]+\/blog_posts\/([\d]+)$/
return [Tag, $1, is_local] if uri.path =~ /^\/tags\/([\d]+)$/
return [Picture, $1, is_local] if uri.path =~ /^\/users\/[\d]+\/pictures\/([\d]+)$/
return [Message, $1, is_local] if uri.path =~ /^\/messages\/([\d]+)$/
@@ -936,7 +950,7 @@
Policy.new(:contributor => user, :name => 'auto', :share_mode => 7, :update_mode => 6)
end
-def update_permissions(ob, permissions)
+def update_permissions(ob, permissions, user)
share_mode = 7
update_mode = 6
@@ -945,30 +959,80 @@
if permissions
- # clear out any permission records for this contributable
+ if (group_policy = permissions.find_first('group-policy-id/text()'))
- ob.contribution.policy.permissions.each do |p|
- p.destroy
- end
+ # Check if valid id
+ if (policy = Policy.find_by_id(group_policy.to_s.to_i)) && policy.group_policy?
+ if user.group_policies.include?(policy)
- permissions.find('permission').each do |permission|
+ existing_policy = ob.contribution.policy
+ existing_policy.destroy unless existing_policy.group_policy?
+ ob.contribution.policy = policy
+ ob.contribution.save
+ return
- # handle public privileges
+ else
+ ob.errors.add_to_base("You must be a member of #{group_policy.contributor.title} to use group policy: #{group_policy}")
+ raise
+ end
+ else
+ ob.errors.add_to_base("#{group_policy} does not appear to be a valid group policy ID")
+ raise
+ end
+ else
- if permission.find_first('category/text()').to_s == 'public'
+ # Create a policy for the resource if one doesn't exist, or if the previous policy was a shared one.
+ if ob.contribution.policy.nil? || ob.contribution.policy.group_policy?
+ ob.contribution.policy = create_default_policy(user)
+ ob.contribution.save
+ end
- privileges = {}
+ # clear out any permission records for this contributable
+ ob.contribution.policy.permissions.each do |p|
+ p.destroy
+ end
- permission.find('privilege').each do |el|
- privileges[el['type']] = true
- end
+ permissions.find('permission').each do |permission|
- if privileges["view"] && privileges["download"]
- share_mode = 0
- elsif privileges["view"]
- share_mode = 2
- else
- share_mode = 7
+ # handle public privileges
+
+ case permission.find_first('category/text()').to_s
+ when 'public'
+ privileges = {}
+
+ permission.find('privilege').each do |el|
+ privileges[el['type']] = true
+ end
+
+ if privileges["view"] && privileges["download"]
+ share_mode = 0
+ elsif privileges["view"]
+ share_mode = 2
+ else
+ share_mode = 7
+ end
+ when 'group'
+ id = permission.find_first('id/text()').to_s.to_i
+ privileges = {}
+
+ permission.find('privilege').each do |el|
+ privileges[el['type']] = true
+ end
+
+ network = Network.find_by_id(id)
+ if network.nil?
+ ob.errors.add_to_base("Couldn't share with group #{id} - Not found")
+ raise
+ else
+ Permission.create(:contributor => network,
+ :policy => ob.contribution.policy,
+ :view => privileges["view"],
+ :download => privileges["download"],
+ :edit => privileges["edit"])
+ unless (use_layout = permission.find_first('use-layout/text()')).nil?
+ ob.contribution.policy.layout = network.layout_name if use_layout.to_s == 'true'
+ end
+ end
end
end
end
@@ -983,14 +1047,14 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create a workflow") unless Authorization.check('create', Workflow, opts[:user], nil)
if opts[:query]['id']
ob, error = obtain_rest_resource('Workflow', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
ob = Workflow.new(:contributor => opts[:user])
end
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('Workflow', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
raise "Invalid action '#{action}'"
@@ -1135,13 +1199,14 @@
# Elements to update if we're not dealing with a workflow version
if opts[:query]['version'].nil?
+ update_permissions(ob, permissions, opts[:user])
+ end
- if ob.contribution.policy.nil?
- ob.contribution.policy = create_default_policy(opts[:user])
- ob.contribution.save
- end
-
- update_permissions(ob, permissions)
+ # Extract internals and stuff
+ if ob.is_a?(WorkflowVersion)
+ ob.workflow.extract_metadata
+ else
+ ob.extract_metadata
end
end
@@ -1169,14 +1234,14 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create a file") unless Authorization.check('create', Blob, opts[:user], nil)
if opts[:query]['id']
ob, error = obtain_rest_resource('Blob', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
ob = Blob.new(:contributor => opts[:user])
end
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('Blob', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
raise "Invalid action '#{action}'"
@@ -1198,6 +1263,7 @@
description = parse_element(data, :text, '/file/description')
license_type = parse_element(data, :text, '/file/license-type')
type = parse_element(data, :text, '/file/type')
+ filename = parse_element(data, :text, '/file/filename')
content_type = parse_element(data, :text, '/file/content-type')
content = parse_element(data, :binary, '/file/content')
revision_comment = parse_element(data, :text, '/file/revision-comment')
@@ -1221,6 +1287,17 @@
end
end
end
+
+ # file name
+
+ if filename && !filename.blank?
+ ob.local_name = filename
+ else
+ if ob.local_name.blank?
+ ob.errors.add("Filename", "missing")
+ return rest_response(400, :object => ob)
+ end
+ end
# handle type
@@ -1273,13 +1350,7 @@
return rest_response(400, :object => ob) unless success
if opts[:query]['version'].nil?
-
- if ob.contribution.policy.nil?
- ob.contribution.policy = create_default_policy(opts[:user])
- ob.contribution.save
- end
-
- update_permissions(ob, permissions)
+ update_permissions(ob, permissions, opts[:user])
end
end
@@ -1307,10 +1378,25 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create a pack") unless Authorization.check('create', Pack, opts[:user], nil)
- ob = Pack.new(:contributor => opts[:user])
- when 'view', 'edit', 'destroy':
+ if id = opts[:query]['id']
+ ob = Pack.find_by_id(id)
+ if ob.nil?
+ return rest_response(404, :reason => "Couldn't find a Pack with id #{id}")
+ else
+ if Authorization.check('edit', ob, opts[:user])
+ ob.snapshot!
+ return rest_get_request(ob, opts[:user], { "id" => ob.id.to_s })
+ else
+ return rest_response(401, :reason => "Not authorised to snapshot pack #{id}")
+ end
+ end
+ else
+ ob = Pack.new(:contributor => opts[:user])
+ end
+
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('Pack', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
raise "Invalid action '#{action}'"
@@ -1331,6 +1417,19 @@
permissions = data.find_first('/pack/permissions')
+ if license_type = parse_element(data, :text, '/pack/license-type')
+ if license_type == ""
+ ob.license = nil
+ else
+ ob.license = License.find_by_unique_name(license_type)
+
+ if ob.license.nil?
+ ob.errors.add("License type")
+ return rest_response(400, :object => ob)
+ end
+ end
+ end
+
# build the contributable
ob.title = title if title
@@ -1340,12 +1439,7 @@
return rest_response(400, :object => ob)
end
- if ob.contribution.policy.nil?
- ob.contribution.policy = create_default_policy(opts[:user])
- ob.contribution.save
- end
-
- update_permissions(ob, permissions)
+ update_permissions(ob, permissions, opts[:user])
end
rest_get_request(ob, opts[:user], { "id" => ob.id.to_s })
@@ -1379,7 +1473,7 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create an external pack item") unless Authorization.check('create', PackRemoteEntry, opts[:user], pack)
return rest_response(400, :reason => "Pack not found") if pack.nil?
@@ -1392,7 +1486,7 @@
:alternate_uri => alternate_uri,
:comment => comment)
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('PackRemoteEntry', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
@@ -1446,12 +1540,15 @@
pack = parse_element(data, :resource, '/internal-pack-item/pack')
item = parse_element(data, :resource, '/internal-pack-item/item')
comment = parse_element(data, :text, '/internal-pack-item/comment')
+
+ version_node = data.find_first('/internal-pack-item/item/@version')
+ version = version_node ? version_node.value.to_i : nil
end
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create an internal pack item") unless Authorization.check('create', PackContributableEntry, opts[:user], pack)
return rest_response(400, :reason => "Pack not found") if pack.nil?
@@ -1459,9 +1556,10 @@
ob = PackContributableEntry.new(:user => opts[:user],
:pack => pack,
:contributable => item,
- :comment => comment)
+ :comment => comment,
+ :contributable_version => version)
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('PackContributableEntry', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
@@ -1550,7 +1648,12 @@
q = args[:query]
models = args[:models]
- search_result = models[0].multi_solr_search(q, :limit => size, :offset => size * (page - 1), :models => models)
+ search_result = Sunspot.search models do
+ fulltext q
+ adjust_solr_params { |p| p[:defType] = 'edismax' }
+ paginate :page => page, :per_page => size
+ end
+
search_result.results unless search_result.total < (size * (page - 1))
}
end
@@ -1569,9 +1672,9 @@
if bits.length == 4
case bits[1]
- when 'workflows': model = Workflow
- when 'files': model = Blob
- when 'packs': model = Pack
+ when 'workflows'; model = Workflow
+ when 'files'; model = Blob
+ when 'packs'; model = Pack
else return rest_response(400, :reason => "Unknown category '#{bits[1]}'")
end
@@ -1751,8 +1854,8 @@
def whoami_redirect(opts)
if opts[:user].class == User
case opts[:format]
- when "xml": rest_response(307, :location => rest_access_uri(opts[:user]))
- when "rdf": rest_response(307, :location => formatted_user_url(:id => opts[:user].id, :format => 'rdf'))
+ when "xml"; rest_response(307, :location => rest_access_uri(opts[:user]))
+ when "rdf"; rest_response(307, :location => formatted_user_url(:id => opts[:user].id, :format => 'rdf'))
end
else
rest_response(401, :reason => "Not logged in")
@@ -1820,6 +1923,70 @@
privileges
end
+# Permissions - only visible to users with edit permissions
+
+def permissions(ob, user, query)
+
+ policy = ob.is_a?(Policy) ? ob : ob.contribution.policy
+
+ def permission_node(view, download, edit, category, id = nil, layout = false)
+ node = LibXML::XML::Node.new('permission')
+ category_node = LibXML::XML::Node.new('category')
+ category_node << category
+ node << category_node
+ if id
+ id_node = LibXML::XML::Node.new('id')
+ id_node << id
+ node << id_node
+ end
+ if view
+ privilege = LibXML::XML::Node.new('privilege')
+ privilege['type'] = "view"
+ node << privilege
+ end
+ if download
+ privilege = LibXML::XML::Node.new('privilege')
+ privilege['type'] = "download"
+ node << privilege
+ end
+ if edit
+ privilege = LibXML::XML::Node.new('privilege')
+ privilege['type'] = "edit"
+ node << privilege
+ end
+ if layout
+ use_layout_node = LibXML::XML::Node.new('use-layout')
+ use_layout_node << 'true'
+ node << use_layout_node
+ end
+
+ if view || edit || download
+ node
+ else
+ nil
+ end
+ end
+
+ permissions = LibXML::XML::Node.new('permissions')
+ permissions << permission_node([0,1,2].include?(policy.share_mode),
+ policy.share_mode == 0,
+ false,
+ 'public')
+
+ unless ob.is_a?(Policy)
+ permissions['uri'] = rest_access_uri(policy)
+ permissions['resource'] = rest_resource_uri(policy)
+ permissions['policy-type'] = policy.group_policy? ? 'group' : 'user-specified'
+ end
+
+ policy.permissions.select {|p| p.contributor_type == "Network"}.each do |perm|
+ permissions << permission_node(perm.view, perm.download, perm.edit, 'group', perm.contributor_id,
+ policy.layout == perm.contributor.layout_name)
+ end
+
+ permissions
+end
+
# Comments
def comment_aux(action, opts)
@@ -1835,11 +2002,11 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create a comment") unless Authorization.check('create', Comment, opts[:user], subject)
ob = Comment.new(:user => opts[:user])
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('Comment', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
raise "Invalid action '#{action}'"
@@ -1923,7 +2090,7 @@
event.save
end
- subject.solr_save
+ subject.solr_index
return rest_get_request(ob, opts[:user], { "id" => ob.id.to_s })
end
@@ -1971,11 +2138,11 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create a favourite") unless Authorization.check('create', Bookmark, opts[:user], target)
ob = Bookmark.new(:user => opts[:user])
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('Bookmark', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
raise "Invalid action '#{action}'"
@@ -2034,11 +2201,11 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create a rating") unless Authorization.check('create', Rating, opts[:user], subject)
ob = Rating.new(:user => opts[:user])
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('Rating', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
raise "Invalid action '#{action}'"
@@ -2100,11 +2267,11 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create a tagging") unless Authorization.check('create', Tagging, opts[:user], subject)
ob = Tagging.new(:user => opts[:user])
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('Tagging', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
raise "Invalid action '#{action}'"
@@ -2153,10 +2320,10 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create an ontology") unless Authorization.check('create', Ontology, opts[:user], nil)
ob = Ontology.new(:user => opts[:user])
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('Ontology', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
raise "Invalid action '#{action}'"
@@ -2223,10 +2390,10 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create a predicate") unless Authorization.check('create', Predicate, opts[:user], ontology)
ob = Predicate.new
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('Predicate', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
raise "Invalid action '#{action}'"
@@ -2285,10 +2452,10 @@
# Obtain object
case action
- when 'create':
+ when 'create';
return rest_response(401, :reason => "Not authorised to create a relationship") unless Authorization.check('create', Relationship, opts[:user], context)
ob = Relationship.new(:user => opts[:user])
- when 'view', 'edit', 'destroy':
+ when 'view', 'edit', 'destroy';
ob, error = obtain_rest_resource('Relationship', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
raise "Invalid action '#{action}'"
@@ -2332,10 +2499,146 @@
# Call dispatcher
def rest_call_request(opts)
-# begin
+ begin
send(opts[:rules]['Function'], opts)
-# rescue
-# return rest_response(500)
-# end
+ rescue
+ if Rails.env == "production"
+ return rest_response(500)
+ else
+ raise
+ end
+ end
end
+
+# Component Querying
+def get_components(opts)
+ query = opts[:query]
+
+ annotations = query['annotations'] # annotations on workflow itself
+ # annotations on workflow features
+ inputs = query["input"]
+ outputs = query["output"]
+ processors = query["processor"]
+
+ # Filter workflow set
+ pivot, problem = calculate_pivot(
+ :pivot_options => Conf.pivot_options,
+ :params => query,
+ :user => opts[:user],
+ :search_models => [Workflow],
+ :no_pagination => true,
+ :locked_filters => { 'CATEGORY' => 'Workflow' },
+ :active_filters => ["CATEGORY", "TYPE_ID", "TAG_ID", "USER_ID",
+ "LICENSE_ID", "GROUP_ID", "WSDL_ENDPOINT",
+ "CURATION_EVENT", "SERVICE_PROVIDER",
+ "SERVICE_COUNTRY", "SERVICE_STATUS"])
+
+ workflow_ids = pivot[:results].map {|r| r.is_a?(SearchResult) ? r.result_id : r.contributable_id }
+
+ begin
+ matches = filter_by_semantic_annotations(workflow_ids, inputs, outputs, processors, annotations)
+ rescue RuntimeError => e
+ if e.message == "Bad Syntax"
+ return rest_response(400)
+ else
+ raise e
+ end
+ end
+
+ # Render
+ produce_rest_list(opts[:uri], opts[:rules], query, matches, "workflows", [], opts[:user])
+end
+
+def get_policies(opts)
+ policies = []
+
+ if opts[:user].is_a?(User)
+ if opts[:query]["type"] == 'group'
+ policies = opts[:user].group_policies
+ else
+ policies = opts[:user].policies + opts[:user].group_policies
+ end
+ end
+
+ produce_rest_list(opts[:uri], opts[:rules], opts[:query], policies, "policies", [], opts[:user])
+end
+
+
+private
+
+# Here be dragons!
+def filter_by_semantic_annotations(workflow_ids, inputs, outputs, processors, annotations)
+
+ # This method returns an array of workflow ids for workflows that possess all of the specified features.
+ def get_workflow_feature_matches(workflow_ids, features, model, query_conditions, query_conditions_excluding)
+ # "features" is an array of sets of annotations to be queried, in the form [ '"<ann1>","<ann2>"' , '"<ann3>"' ]
+ # Where "<ann1>" etc. is in the form "pred1 obj1", where pred1 and obj1 are the predicate and object parts of an RDF triple, respectively..
+ # The above example states that the workflow must have a <feature> that has annotations "pred1 obj1" and "pred2 obj2", AND
+ # another, different <feature> with "pred3 obj3".
+
+ selected = []
+ feature_matches = features.collect do |key,set|
+ raise "Bad Syntax" unless set =~ /^("[^ ]+ [^"]+")(,"[^ ]+ [^"]+")*$/
+
+ feature_annotations = set.split('","').collect {|a| a.gsub('"','')}
+ # "<ann1>", "<ann2>" (example)
+ matching_features = feature_annotations.collect { |a|
+ # Find all <features> with semantic annotation "<predicate> <object>" (example)
+ predicate, object = a.split(" ", 2)
+ unless selected.empty?
+ model.find(:all, :include => :semantic_annotations,
+ :conditions => [query_conditions, workflow_ids, predicate, object, selected])
+ else
+ model.find(:all, :include => :semantic_annotations,
+ :conditions => [query_conditions_excluding, workflow_ids, predicate, object])
+ end
+
+ }.inject {|f, matches| matches & f} # Get the intersection of <features> that have each annotation.
+ # ie. the set of <features> that have ALL the required annotations
+ selected += matching_features
+ matching_features.collect {|wp| wp.workflow_id} # Get the workflows that those features belong to
+ end
+
+ feature_matches.inject {|matches, matches_all| matches_all & matches}
+ end
+
+
+ # Filter for workflows that have the required inputs
+ if inputs
+ workflow_ids = workflow_ids & get_workflow_feature_matches(workflow_ids, inputs, WorkflowPort,
+ "workflow_id IN (?) AND semantic_annotations.predicate = ? AND semantic_annotations.object = ? AND port_type = 'input' AND workflow_ports.id NOT IN (?)",
+ "workflow_id IN (?) AND semantic_annotations.predicate = ? AND semantic_annotations.object = ? AND port_type = 'input'")
+ end
+
+ # Filter for workflows that have the required outputs
+ if outputs
+ workflow_ids = workflow_ids & get_workflow_feature_matches(workflow_ids, outputs, WorkflowPort,
+ "workflow_id IN (?) AND semantic_annotations.predicate = ? AND semantic_annotations.object = ? AND port_type = 'output' AND workflow_ports.id NOT IN (?)",
+ "workflow_id IN (?) AND semantic_annotations.predicate = ? AND semantic_annotations.object = ? AND port_type = 'output'")
+ end
+
+ # Filter for workflows that have the required processors
+ if processors
+ workflow_ids = workflow_ids & get_workflow_feature_matches(workflow_ids, processors, WorkflowProcessor,
+ "workflow_id IN (?) AND semantic_annotations.predicate = ? AND semantic_annotations.object = ? AND workflow_processors.id NOT IN (?)",
+ "workflow_id IN (?) AND semantic_annotations.predicate = ? AND semantic_annotations.object = ?")
+ end
+
+ # Filter for workflows that have the required semantic annotations
+ unless annotations.blank?
+ raise "Bad Syntax" unless annotations =~ /^("[^ ]+ [^"]+")(,"[^ ]+ [^"]+")*$/
+
+ annotations = annotations.split('","').collect {|a| a.gsub('"','')}
+
+ matches_semantic_annotation_requirements = annotations.collect { |a|
+ predicate, object = a.split(" ", 2)
+ SemanticAnnotation.find_all_by_predicate_and_object_and_subject_type(predicate, object, "Workflow").map {|a| a.subject_id}
+ }
+
+ workflow_ids = workflow_ids & matches_semantic_annotation_requirements.inject {|matches, matches_all| matches_all & matches}
+ end
+
+ # Workflows that match ALL the requirements - the intersection of all the sub arrays.
+ Workflow.find_all_by_id(workflow_ids)
+end
Modified: branches/events/lib/sanity_test.rb (3490 => 3491)
--- branches/events/lib/sanity_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/sanity_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -54,13 +54,12 @@
users = User.find(:all)
workflows = Workflow.find(:all)
- blogs = Blog.find(:all)
blobs = Blob.find(:all)
packs = Pack.find(:all)
services = Service.find(:all)
contributions = Contribution.find(:all)
- known_contributables = workflows + blobs + blogs + packs + services
+ known_contributables = workflows + blobs + packs + services
should_be_empty("All users must have a name",
users.select do |u| u.name == nil or u.name.length == 0 end)
@@ -76,9 +75,6 @@
should_be_empty("All files must have a contribution record",
blobs.select do |b| b.contribution.nil? end)
- should_be_empty("All blogs must have a contribution record",
- blogs.select do |b| b.contribution.nil? end)
-
should_be_empty("All packs must have a contribution record",
packs.select do |f| f.contribution.nil? end)
Deleted: branches/events/lib/tasks/fckeditor_tasks.rake (3490 => 3491)
--- branches/events/lib/tasks/fckeditor_tasks.rake 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/tasks/fckeditor_tasks.rake 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,97 +0,0 @@
-# desc "Explaining what the task does"
-# task :fckeditor do
-# # Task goes here
-# end
-
-namespace :fckeditor do
- def setup
- require "config/environment"
- require 'fileutils'
-
- directory = File.join(RAILS_ROOT, '/vendor/plugins/fckeditor/')
- require "#{directory}lib/fckeditor"
- require "#{directory}lib/fckeditor_version"
- require "#{directory}lib/fckeditor_file_utils"
- end
-
- desc 'Install the FCKEditor components'
- task :install do
- setup
- puts "** Installing FCKEditor Plugin version #{FckeditorVersion.current}..."
-
- FckeditorFileUtils.destroy_and_install
-
- puts "** Successfully installed FCKEditor Plugin version #{FckeditorVersion.current}"
- end
-
- def fetch(path)
- response = Net::HTTP.get_response(URI.parse(path))
- case response
- when Net::HTTPSuccess then
- response
- when Net::HTTPRedirection then
- puts "** Redirected to #{response['location']}"
- fetch(response['location'])
- else
- response.error!
- end
- end
-
- desc "Update the FCKEditor code to the latest nightly build"
- task :download do
- require 'net/http'
- require 'zip/zipfilesystem'
-
- setup
- version = ENV['VERSION'] || "Nightly"
- installed_version = "2.4.2"
-
- puts "** Current FCKEditor version: #{installed_version}..."
- puts "** Downloading #{version} (1.2mb - please be patient)..."
-
- rails_tmp_path = File.join(RAILS_ROOT, "/tmp/")
- tmp_zip_path = File.join(rails_tmp_path, "fckeditor_#{version}.zip")
-
- # Creating tmp dir if it doesn't exist
- Dir.mkdir(rails_tmp_path) unless File.exists? rails_tmp_path
-
- # Download nightly build (http://www.fckeditor.net/nightly/FCKeditor_N.zip)
- # Releases (http://downloads.sourgefourge.net/fckeditor/FCKEditor_[2.4.3, 2.5b, 2.4.2].zip)
- nightly = version=='Nightly' ? true : false
- domain = nightly ? "http://www.fckeditor.net" : "http://downloads.sourceforge.net"
- path = nightly ? "/nightly/FCKeditor_N.zip" : "/fckeditor/FCKeditor_#{version}.zip"
-
- puts "** Download from #{domain}#{path}"
- #Net::HTTP.start(domain) { |http|
- response = fetch("#{domain}#{path}")
-
- open(tmp_zip_path, "wb") { |file|
- file.write(response.body)
- }
- #}
- puts "** Download successful"
-
- puts "** Extracting FCKeditor"
- Zip::ZipFile.open(tmp_zip_path) do |zipfile|
- zipfile.each do |entry|
- filename = File.join(rails_tmp_path, entry.name)
- FileUtils.rm_f(filename)
- FileUtils.mkdir_p(File.dirname(filename))
- entry.extract(filename)
- end
- end
-
- puts "** Backing up existing FCKEditor install to /public/_javascript_s/fckeditor_bck"
- FckeditorFileUtils.backup_existing
-
- puts "** Shifting files to /public/_javascript_s/fckeditor"
- FileUtils.cp_r File.join(RAILS_ROOT, "/tmp/fckeditor/"), File.join(RAILS_ROOT, "/public/_javascript_s/")
-
- puts "** Clean up"
- FileUtils.remove_file(tmp_zip_path, true)
- FileUtils.remove_entry(File.join(rails_tmp_path, "fckeditor/"), true)
-
- puts "** Successfully updated to FCKEditor version: #{version}..."
- end
-end
-
Deleted: branches/events/lib/tasks/structured_data_tasks.rake (3490 => 3491)
--- branches/events/lib/tasks/structured_data_tasks.rake 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/tasks/structured_data_tasks.rake 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,4 +0,0 @@
-# desc "Explaining what the task does"
-# task :structured_data do
-# # Task goes here
-# end
Modified: branches/events/lib/workflow_processors/interface.rb (3490 => 3491)
--- branches/events/lib/workflow_processors/interface.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/workflow_processors/interface.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -117,7 +117,7 @@
XML::Node.new("components")
end
- def extract_metadata(workflow_id)
+ def extract_metadata(workflow)
end
# End Instance Methods
Copied: branches/events/lib/workflow_processors/statjr_ebook.rb (from rev 3490, trunk/lib/workflow_processors/statjr_ebook.rb) (0 => 3491)
--- branches/events/lib/workflow_processors/statjr_ebook.rb (rev 0)
+++ branches/events/lib/workflow_processors/statjr_ebook.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,189 @@
+# myExperiment: lib/workflow_processors/bioextract_processosr.rb
+#
+# Copyright (c) 2008 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+module WorkflowProcessors
+
+ class StatjrEbook < WorkflowProcessors::Interface
+
+ # Begin Class Methods
+
+ # These:
+ # - provide information about the Workflow Type supported by this processor,
+
+ # MUST be unique across all processors
+ def self.display_name
+ "StatJR eBook"
+ end
+
+ def self.display_data_format
+ "ZIP"
+ end
+
+ def self.mime_type
+ "application/zip"
+ end
+
+ # All the file extensions supported by this workflow processor.
+ # Must be all in lowercase.
+ def self.file_extensions_supported
+ [ "zip" ]
+ end
+
+ def self.can_determine_type_from_file?
+ true
+ end
+
+ def self.recognised?(file)
+ begin
+ file.rewind
+ deep_model = WorkflowProcessors::StatjrEbookLib::Parser.parse(file.read)
+ file.rewind
+# Rails.logger.info "deep model: #{deep_model.title}"
+ return !deep_model.nil?
+ rescue
+ Rails.logger.info $!
+ return false
+ end
+ end
+
+ def self.can_infer_metadata?
+ ##return true
+ return false
+ end
+
+ def self.can_generate_preview_image?
+ false
+ end
+
+ def self.can_generate_preview_svg?
+ false
+ end
+
+ # End Class Methods
+
+
+ # Begin Object Initializer
+
+ def initialize(workflow_definition)
+ super(workflow_definition)
+ @deep_model = WorkflowProcessors::StatjrEbookLib::Parser.parse(workflow_definition)
+ end
+
+ # End Object Initializer
+
+
+ # Begin Instance Methods
+
+ # These provide more specific functionality for a given workflow definition, such as parsing for metadata and image generation.
+
+ def get_title
+ return nil if @deep_model.nil?
+ return (@deep_model.title.blank? ? "[untitled]" : @deep_model.title)
+ end
+
+ def get_description
+ return nil if @deep_model.nil?
+ return @deep_model.description
+ end
+
+ def get_workflow_model_object
+ return @deep_model
+ end
+
+ def get_preview_image
+ nil
+ end
+
+ def get_preview_svg
+ nil
+ end
+
+ def get_workflow_model_input_ports
+
+ end
+
+ def get_search_terms
+ ""
+ end
+
+ def get_components
+ end
+
+ # End Instance Methods
+ end
+
+
+ module StatjrEbookLib
+
+ class Model
+ # The author of the workflow.
+ attr_accessor :author
+
+ # The name/title of the workflow.
+ attr_accessor :title
+
+ # A small piece of descriptive text for the workflow.
+ attr_accessor :description
+
+ end
+
+ module Parser
+
+ require "zip/zip"
+ require 'rdf/raptor'
+
+ def self.parse(stream)
+ begin
+ Tempfile.open("deep", "tmp") do |zip_file|
+ zip_file.write(stream)
+ zip_file.close
+
+ Zip::ZipFile.open(zip_file.path) do |zip|
+ ebookdef = zip.read("ebookdef.ttl")
+ graph = RDF::Graph.new()
+ reader = RDF::Reader.for(:turtle).new(ebookdef)
+ graph << reader
+ ns_ebook = RDF::Vocabulary.new("http://purl.org/net/deep/ns#")
+ ns_dcterms = RDF::Vocabulary.new("http://purl.org/dc/terms/")
+ query = RDF::Query.new do
+ pattern [:ebook, RDF.type, ns_ebook.EbookFile]
+ pattern [:ebook, ns_dcterms.title, :title]
+ end
+ ebook = nil
+ title = nil
+ desc = nil
+ query.execute(graph).each do |solution|
+ ebook = solution.ebook
+ title = solution.title.to_s
+ end
+
+ return nil unless ebook
+
+ query = RDF::Query.new do
+ pattern [ebook, ns_dcterms.description, :desc]
+ end
+ query.execute(graph).each do |solution|
+ desc = solution.desc.to_s
+ end
+ return create_model(ebook, title, desc)
+ end
+ end
+ rescue
+ Rails.logger.info $!
+ nil
+ end
+ end
+ def self.create_model(ebook, title, description) # :nodoc:
+ model = StatjrEbookLib::Model.new
+ model.title = title
+ model.description = description
+ return model
+ end
+
+ end
+
+ end
+
+end
Modified: branches/events/lib/workflow_processors/taverna2.rb (3490 => 3491)
--- branches/events/lib/workflow_processors/taverna2.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/workflow_processors/taverna2.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -9,6 +9,8 @@
require 't2flow/parser'
require 't2flow/dot'
require 'libxml'
+ require 'rdf'
+ require 'rdf/n3'
require 'file_upload'
@@ -243,6 +245,15 @@
node
end
+ def build_semantic_annotation_element(object)
+ build('semantic_annotation') do |semantic_annotation_element|
+ if object.semantic_annotation
+ semantic_annotation_element << build('type', object.semantic_annotation.type)
+ semantic_annotation_element << build('content', object.semantic_annotation.content)
+ end
+ end
+ end
+
build(tag) do |components|
components << build('dataflows') do |dataflows_element|
@@ -281,6 +292,8 @@
end
end
end
+
+ source_element << build_semantic_annotation_element(source) if source.semantic_annotation
end
end
end
@@ -297,7 +310,6 @@
if sink.descriptions
sink.descriptions.each do |sink_description|
-
sink_descriptions_element << build('description', sink_description)
end
end
@@ -312,6 +324,7 @@
end
end
end
+ sink_element << build_semantic_annotation_element(sink) if sink.semantic_annotation
end
end
end
@@ -335,6 +348,7 @@
processor_element << build('biomoby-service-name', processor.biomoby_service_name) if processor.biomoby_service_name
processor_element << build('biomoby-category', processor.biomoby_category) if processor.biomoby_category
processor_element << build('value', processor.value) if processor.value
+ processor_element << build_semantic_annotation_element(processor) if processor.semantic_annotation
if processor.dataflow_id
nested_dataflow = base_model.dataflow(processor.dataflow_id)
@@ -364,6 +378,8 @@
end
end
end
+
+ dataflow_element << build_semantic_annotation_element(dataflow.annotations) if dataflow.annotations.semantic_annotation
end
end
end
@@ -373,16 +389,48 @@
aux(@t2flow_model, @t2flow_model, 'components')
end
- def extract_metadata(workflow_id)
+ def extract_metadata(workflow)
@t2flow_model.all_processors.each do |processor|
- WorkflowProcessor.create(:workflow_id => workflow_id,
+ workflow_processor = WorkflowProcessor.create(:workflow => workflow,
:name => processor.name,
:wsdl => processor.wsdl,
:wsdl_operation => processor.wsdl)
+ create_semantic_annotations(workflow_processor, processor.semantic_annotation) if processor.semantic_annotation
end
+
+ @t2flow_model.sources.each do |source|
+ port = WorkflowPort.create(:workflow => workflow,
+ :port_type => "input",
+ :name => source.name)
+ create_semantic_annotations(port, source.semantic_annotation) if source.semantic_annotation
+ end
+
+ @t2flow_model.sinks.each do |sink|
+ port = WorkflowPort.create(:workflow => workflow,
+ :port_type => "output",
+ :name => sink.name)
+ create_semantic_annotations(port, sink.semantic_annotation) if sink.semantic_annotation
+ end
+
+ create_semantic_annotations(workflow, @t2flow_model.main.annotations.semantic_annotation) if @t2flow_model.main.annotations.semantic_annotation
end
+ def create_semantic_annotations(subject, semantic_annotations)
+ if semantic_annotations.type == "text/rdf+n3"
+ g = RDF::Graph.new
+ g << RDF::Reader.for(:n3).new(semantic_annotations.content)
+
+ g.each_statement do |statement|
+ predicate = statement.predicate.to_s
+ object = statement.object.to_s
+ SemanticAnnotation.create(:subject => subject, :predicate => predicate, :object => object)
+ end
+ else
+ raise "Unsupported annotation content type (#{semantic_annotations.type}) for #{subject}."
+ end
+ end
+
# End Instance Methods
end
end
Modified: branches/events/lib/workflow_processors/taverna_scufl.rb (3490 => 3491)
--- branches/events/lib/workflow_processors/taverna_scufl.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/workflow_processors/taverna_scufl.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -289,10 +289,10 @@
aux(@scufl_model, 'components')
end
- def extract_metadata(workflow_id)
+ def extract_metadata(workflow)
@scufl_model.all_processors.each do |processor|
- WorkflowProcessor.create(:workflow_id => workflow_id,
+ WorkflowProcessor.create(:workflow => workflow,
:name => processor.name,
:wsdl => processor.wsdl,
:wsdl_operation => processor.wsdl_operation)
Modified: branches/events/lib/workflow_types_handler.rb (3490 => 3491)
--- branches/events/lib/workflow_types_handler.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/lib/workflow_types_handler.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -6,7 +6,7 @@
# Helper class to deal with Workflow types and processors.
# Note that workflow types can exist that don't have corresponding processors.
-require 'lib/workflow_processors/interface'
+require 'workflow_processors/interface'
class WorkflowTypesHandler
@@ -131,7 +131,7 @@
# so that they are then accessible via the ObjectSpace.
# We assume (and this is a rails convention for anything in the /lib/ directory),
# that filenames for example "my_class.rb" correspond to class names for example MyClass.
-Dir.chdir(File.join(RAILS_ROOT, "lib/workflow_processors")) do
+Dir.chdir(File.join(Rails.root, "lib/workflow_processors")) do
Dir.glob("*.rb").each do |f|
("workflow_processors/" + f.gsub(/.rb/, '')).camelize.constantize
end
Deleted: branches/events/migrate.sh (3490 => 3491)
--- branches/events/migrate.sh 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/migrate.sh 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,61 +0,0 @@
-#!/bin/bash
-
-export RAILS_ENV=production
-
-RAILS_ROOT=/var/www/m2
-DB_USER=root
-DB=m2_${RAILS_ENV}
-DUMP_SRC=~/myexperiment/backup/myexperiment_production.sql
-WORKFLOW_SRC=~/myexperiment/backup/workflow
-SCUFL_SRC=${WORKFLOW_SRC}/scufl
-
-if [ ! -e $DUMP_SRC ]; then
- echo SQL dump not found: $DUMP_SRC
- exit
-fi
-
-if [ ! -e $WORKFLOW_SRC ]; then
- echo Workflow directory not found: $WORKFLOW_SRC
- exit
-fi
-
-cd ${RAILS_ROOT}
-
-rm -rf index carlin
-mkdir carlin
-
-cd carlin
-
-rm -rf public/pictures
-rm -rf public/workflow
-cp ${DUMP_SRC} myexperiment_production.sql
-cp -r ${SCUFL_SRC} scufl
-
-grep 'INSERT INTO `pictures`' < ${DUMP_SRC} > import.sql
-grep 'INSERT INTO `posts`' < ${DUMP_SRC} >> import.sql
-grep 'INSERT INTO `topics`' < ${DUMP_SRC} >> import.sql
-
-grep -v 'INSERT INTO `boards`' < myexperiment_production.sql > temp2.sql
-grep -v 'INSERT INTO `channelmessages`' < temp2.sql > temp3.sql
-grep -v 'INSERT INTO `channels`' < temp3.sql > temp4.sql
-grep -v 'INSERT INTO `channels_users`' < temp4.sql > temp5.sql
-grep -v 'INSERT INTO `channel_topics`' < temp5.sql > temp6.sql
-grep -v 'INSERT INTO `experiments`' < temp6.sql > temp7.sql
-grep -v 'INSERT INTO `lists`' < temp7.sql > temp8.sql
-grep -v 'INSERT INTO `plugin_schema_info`' < temp8.sql > temp9.sql
-grep -v 'INSERT INTO `pictures`' < temp9.sql > temp10.sql
-grep -v 'INSERT INTO `posts`' < temp10.sql > temp11.sql
-grep -v 'INSERT INTO `replies`' < temp11.sql > temp12.sql
-grep -v 'INSERT INTO `schema_info`' < temp12.sql > temp13.sql
-grep -v 'INSERT INTO `todos`' < temp13.sql > temp14.sql
-grep -v 'INSERT INTO `topics`' < temp14.sql > myexperiment_production.sql
-
-mysql --user=${DB_USER} -e "drop database ${DB}"
-mysql --user=${DB_USER} -e "create database ${DB}"
-rake db:migrate
-mysql --user=${DB_USER} ${DB} < import.sql
-
-cd ${RAILS_ROOT}
-
-echo 'include Squirrel; Squirrel.go false, true' | ruby script/console
-
Copied: branches/events/public/.gitignore (from rev 3490, trunk/public/.gitignore) (0 => 3491)
--- branches/events/public/.gitignore (rev 0)
+++ branches/events/public/.gitignore 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,2 @@
+/pictures
+/workflow
Modified: branches/events/public/images/biovel.png
(Binary files differ)
Deleted: branches/events/public/_javascript_s/fckcustom.js (3490 => 3491)
--- branches/events/public/_javascript_s/fckcustom.js 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/public/_javascript_s/fckcustom.js 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,33 +0,0 @@
-// CHANGE FOR APPS HOSTED IN SUBDIRECTORY
-FCKRelativePath = '';
-
-// DON'T CHANGE THESE
-FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector='+FCKRelativePath+'/fckeditor/command';
-FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector='+FCKRelativePath+'/fckeditor/command';
-FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector='+FCKRelativePath+'/fckeditor/command';
-
-FCKConfig.LinkUploadURL = FCKRelativePath+'/fckeditor/upload';
-FCKConfig.ImageUploadURL = FCKRelativePath+'/fckeditor/upload?Type=Image';
-FCKConfig.FlashUploadURL = FCKRelativePath+'/fckeditor/upload?Type=Flash';
-FCKConfig.SpellerPagesServerScript = FCKRelativePath+'/fckeditor/check_spelling';
-FCKConfig.AllowQueryStringDebug = false;
-FCKConfig.SpellChecker = 'SpellerPages';
-
-// ONLY CHANGE BELOW HERE
-FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/silver/';
-
-FCKConfig.ToolbarSets["Simple"] = [
- ['Source','-','-','Templates'],
- ['Cut','Copy','Paste','PasteWord','-','Print','SpellCheck'],
- ['Undo','Redo','-','Find','Replace','-','SelectAll'],
- '/',
- ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
- ['OrderedList','UnorderedList','-','Outdent','Indent'],
- ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
- ['Link','Unlink'],
- '/',
- ['Image','Table','Rule','Smiley'],
- ['FontName','FontSize'],
- ['TextColor','BGColor'],
- ['-','About']
-] ;
Modified: branches/events/public/_javascript_s/folds.js (3490 => 3491)
--- branches/events/public/_javascript_s/folds.js 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/public/_javascript_s/folds.js 2013-04-03 15:44:21 UTC (rev 3491)
@@ -94,5 +94,7 @@
}
}
-initialiseFolds();
+document.observe("dom:loaded", function() {
+ initialiseFolds();
+});
Modified: branches/events/public/_javascript_s/tabs.js (3490 => 3491)
--- branches/events/public/_javascript_s/tabs.js 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/public/_javascript_s/tabs.js 2013-04-03 15:44:21 UTC (rev 3491)
@@ -181,5 +181,7 @@
return false;
}
-addEvent('load', window, initialiseTabs);
+document.observe("dom:loaded", function() {
+ initialiseTabs();
+});
Modified: branches/events/public/stylesheets/biovel.css (3490 => 3491)
--- branches/events/public/stylesheets/biovel.css 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/public/stylesheets/biovel.css 2013-04-03 15:44:21 UTC (rev 3491)
@@ -18,9 +18,8 @@
background-image: url('/images/sidebar_alpha.png');
}
-
.logo a {
- color: #99cc33;
+ color: #333;
}#
.logo a:hover {
@@ -35,18 +34,21 @@
/* To add a white margin around the content */
#doc2 {
- padding: 0 1em;
- border-color: #DFD96D;
- border-style: solid;
- border-width: 0 4px;
+ box-shadow: 0 0 16px 4px #7f793f;
}
#myexp_header {
- margin: 0em 0.5em;
+ margin: 0 0.5em;
}
-#hd
-{
- padding-top: 1em;
+#site_info_links {
+ display: none;
}
+.tabnav li.return_tab {
+ margin-right: 1em;
+}
+
+.tabnav li.return_tab a:hover {
+ background-color: #cd0b37;
+}
Copied: branches/events/public/stylesheets/misc_skinning.css (from rev 3490, trunk/public/stylesheets/misc_skinning.css) (0 => 3491)
--- branches/events/public/stylesheets/misc_skinning.css (rev 0)
+++ branches/events/public/stylesheets/misc_skinning.css 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,7 @@
+table.alt_table tr.odd_row.biovel td, table.alt_table tr.even_row.biovel td, .resource_list_item.biovel {
+ background-color: #EEFFCC;
+}
+
+table.alt_table.biovel, .resource_list_item.biovel {
+ border-color: #99cc33;
+}
Copied: branches/events/public/stylesheets/pagination.css (from rev 3490, trunk/public/stylesheets/pagination.css) (0 => 3491)
--- branches/events/public/stylesheets/pagination.css (rev 0)
+++ branches/events/public/stylesheets/pagination.css 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,46 @@
+.digg_pagination {
+ background: white;
+ cursor: default;
+ /* self-clearing method: */ }
+.digg_pagination a, .digg_pagination span, .digg_pagination em {
+ padding: 0.2em 0.5em;
+ display: block;
+ float: left;
+ margin-right: 1px; }
+.digg_pagination .disabled {
+ color: #999999;
+ border: 1px solid #dddddd; }
+.digg_pagination .current {
+ font-style: normal;
+ font-weight: bold;
+ background: #456aaa;
+ color: white;
+ border: 1px solid #456aaa; }
+.digg_pagination a {
+ text-decoration: none;
+ color: #105cb6;
+ border: 1px solid #456aaa; }
+.digg_pagination a:hover, .digg_pagination a:focus {
+ color: #000033;
+ border-color: #000033; }
+.digg_pagination .page_info {
+ background: #456aaa;
+ color: white;
+ padding: 0.4em 0.6em;
+ width: 22em;
+ margin-bottom: 0.3em;
+ text-align: center; }
+.digg_pagination .page_info b {
+ color: #000033;
+ background: #456aaa;
+ padding: 0.1em 0.25em; }
+.digg_pagination:after {
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden; }
+* html .digg_pagination {
+ height: 1%; }
+*:first-child + html .digg_pagination {
+ overflow: hidden; }
+
Modified: branches/events/public/stylesheets/styles.css (3490 => 3491)
--- branches/events/public/stylesheets/styles.css 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/public/stylesheets/styles.css 2013-04-03 15:44:21 UTC (rev 3491)
@@ -53,7 +53,7 @@
border: none;
padding: 0 0 0.3em 0;
margin: 1em 0 0.8em 0;
- border-bottom: 1px solid #C8C8C8;
+ border-bottom: 1px dotted #999999;
}
h4 {
@@ -72,7 +72,7 @@
}
th,td {
- /*text-align: center;*/
+ text-align: center;
border: none;
/*border: 1px solid #CCCCCC;*/
}
@@ -128,12 +128,12 @@
#myexp_header {
padding-top: 1em;
- margin: 0 0.5em 0 0.5em;
+ margin: 0 0.5em 1em 0.5em;
+ overflow: auto;
}
.logo {
float: left;
- width: 300px;
}
.links {
@@ -144,15 +144,19 @@
#myexp_links
{
float: right;
- width: 600px;
font-size: 93%;
}
#site_info_links {
+ text-align: left;
+ float: left;
+ padding-top: 6px;
+ margin-right: 100px;
}
-/* margin: 0.5em 0; */
+
#user_links {
+ text-align: right;
float: right;
}
@@ -191,11 +195,6 @@
padding: 0 6px 0 6px;
background-color: #456AAA;
width: 180px;
-
- border-radius: 0px 0px 8px 8px;
- -moz-border-radius: 0px 0px 8px 8px;
- -webkit-border-bottom-left-radius: 8px;
- -webkit-border-bottom-right-radius: 8px;
}
/* Begin Footer styles */
@@ -272,9 +271,9 @@
}
#hlist {
- width: 100%;
margin: 0;
padding-left: 1em;
+ padding-right: 1em;
}
#hlist ul {
@@ -831,13 +830,13 @@
table.alt_table {
border-collapse: collapse;
+ border: 1px solid #ccc;
+ margin-bottom: 0.5em;
}
table.alt_table td {
- border-top: 1px solid #BBBBBB;
- border-bottom: 1px solid #BBBBBB;
margin-bottom: 0.5em;
- padding: 1em 0.5em;
+ padding: 0.5em;
vertical-align: top;
width: 737px;
}
@@ -873,12 +872,12 @@
font-weight: normal;
}
-table.alt_table p.title {
+p.title {
margin-top: 0;
padding-top: 0;
margin-bottom: 0.2em;
font-weight: bold;
- font-size: 108%;
+ font-size: 120%;
}
table.alt_table .desc {
@@ -893,19 +892,6 @@
width: 360px;
}
-table.alt_table .standout {
- border: 1px dotted #999999;
- margin: 0.2em 0;
- padding: 0.4em 0.6em;
- background-color: #FFFFCC;
- text-align: left;
- line-height: 1;
- font-size: 93%;
- font-weight: bold;
- color: #333333;
- width: 360px;
-}
-
table.alt_table tr td.contributable {
margin: 0.5em 0;
padding: 1em;
@@ -927,50 +913,6 @@
border: 1px dotted #999999;
}
-/* http://www.mis-algoritmos.com/wp-content/uploads/pagstyle.php?q=manu */
-.pagination {
- padding: 3px;
- margin: 3px;
- text-align: center;
-}
-
-.pagination ul {
- list-style-type: none;
-}
-
-.pagination ul li {
- display: inline;
-}
-
-.pagination a {
- padding: 2px 5px 2px 5px;
- margin: 2px;
- border: 1px solid #317eff;
- text-decoration: none; /* no underline */
- color: #179032;
-}
-
-.pagination a:hover,.pagination a:active {
- border: 1px solid #CE0434;
- color: #179032;
-}
-
-.pagination .currentpage {
- padding: 2px 5px 2px 5px;
- margin: 2px;
- border: 1px solid #179032;
- font-weight: bold;
- background-color: #179032;
- color: #FFF;
-}
-
-.pagination .disabledpage {
- padding: 2px 5px 2px 5px;
- margin: 2px;
- border: 1px solid #EEE;
- color: #DDD;
-}
-
.network_banner { /*width: 640px;*/
padding-left: 10px;
padding-right: 10px;
@@ -993,17 +935,13 @@
}
.sectionIcons li {
- display: inline;
+ display: inline-block;
vertical-align: middle;
margin: 0;
margin-left: 8px;
/*border: 2px solid #F5F5F5;*/
}
-.sectionIcons li:first {
- margin-left: 0;
-}
-
.sectionIcons li:hover {
}
@@ -1015,7 +953,7 @@
width: 100%;
padding: 0.5em 0.5em;
*padding: 0.2em 0.5em;
- line-height: 1.0;
+ line-height: 2.5;
text-decoration: none;
border: 1px solid #BBBBBB;
background-color: #EEF6FF;
@@ -1057,13 +995,12 @@
vertical-align: middle;
}
-.icon A {
- white-space: nowrap;
+.icon a {
padding-right: 2px;
vertical-align: middle;
}
-.icon IMG {
+.icon img {
padding: 2px;
vertical-align: middle;
}
@@ -1087,20 +1024,16 @@
line-height: 1.5;
}
-.contribution_mini_nav HR {
- border: none;
- height: 1px;
- color: #E0E0E0;
- background-color: #E0E0E0;
-}
-
.contribution_left_box {
float: left;
width: 73.5%;
}
-.contribution_description PRE {
- background: inherit;
+.contribution_description {
+ text-align: left;
+ background-color: #FFFFFF;
+ border: 1px solid #CCCCCC;
+ padding: 0.3em 1em;
}
.contribution_preview img {
@@ -1115,10 +1048,12 @@
}
.contribution_section_box {
- background-color: #F8F8C8;
- border-bottom: 1px solid #CCCC99;
- border-right: 1px solid #CCCC99;
+ background-image: url('/images/box-bg1.png');
+ background-position: top;
+ background-repeat: repeat-x;
+ background-color: #FFFFCC;
padding: 0.3em 0.3em;
+ border: 1px dotted #999999;
text-align: center;
margin-bottom: 0.6em;
}
@@ -1147,7 +1082,7 @@
.contribution_section_box .stats_box p {
font-size: 93%;
- text-align: centre;
+ text-align: center;
line-height: 1.3;
padding: 0;
}
@@ -1211,7 +1146,9 @@
}
.contribution_version_box {
+ border: 1px dotted #999999;
margin-bottom: 1em;
+ background-color: #F7F7F7;
}
.contribution_version_box .title {
@@ -1221,9 +1158,13 @@
}
.contribution_version_selector_box {
- background-color: #F8F8C8;
- border-bottom: 1px solid #CCCC99;
padding: 0.6em 0.5em 0.4em 0.5em;
+ border: 0px dotted #999999;
+ border-width: 0 0 1px 0;
+ background-image: url('/images/box-bg1.png');
+ background-position: top;
+ background-repeat: repeat-x;
+ background-color: #FFFFCC;
color: #333333;
}
@@ -1334,20 +1275,13 @@
}
.addCommentBox {
- margin-top: 10px;
- padding: 8px;
- background-color: #E0E0E0;
+ margin-top: 3em;
+ padding: 1em;
+ width: 500px;
+ background-color: #EEEEEE;
+ border: 1px dotted #999999;
}
-.addCommentBox TEXTAREA {
- padding: 4px;
- width: 500px;
-}
-
-.addCommentBox INPUT {
- margin-top: 4px;
-}
-
/* End Comments styles */
/* Begin Reviews styles */
@@ -1467,8 +1401,8 @@
.box_standout {
padding: 0.5em 0.8em;
- background-color: #F8F8C8;
- border-bottom: 1px solid #CCCC99;
+ border: 1px dotted #999999;
+ background-color: #FFFFCC;
}
.box_important {
@@ -1935,7 +1869,7 @@
.workflow_type_box {
border: 1px solid #DDDDDD;
background-color: #FFFFCC;
- margin: 0;
+ margin: 0 0 0.5em 0;
padding: 0.4em 0.5em;
font-size: 77%;
color: #990000;
@@ -1962,30 +1896,34 @@
line-height: 20px;
}
-.unselected_tag {
- background-color: #e0e0e0;
- color: #808080;
- border-bottom: 1px SOLID #c0c0c0;
- padding: 2px 8px 2px 8px;
+.unselected_tag_suggestion {
+ border: 1px solid white;
+ padding-left: 4px;
+ padding-right: 4px;
}
-.unselected_tag:hover {
- background-color: #d0d0d0;
- color: #808080;
- border-bottom: 1px SOLID #a0a0a0;
+.unselected_tag_suggestion:hover {
+ border: 1px solid #d0d0f0;
+ background-color: white;
+ padding-left: 4px;
+ padding-right: 4px;
+ color: #000099;
text-decoration: none;
}
-.tag {
+.selected_tag_suggestion {
+ border: 1px solid #a0a0c0;
background-color: #d0d0f0;
- border-bottom: 1px SOLID #a0a0c0;
- padding: 2px 8px 2px 8px;
+ padding-left: 4px;
+ padding-right: 4px;
}
-.tag:hover {
- background-color: #c0c0e0;
+.selected_tag_suggestion:hover {
+ border: 1px solid #a0a0c0;
+ background-color: #d0d0f0;
+ padding-left: 4px;
+ padding-right: 4px;
color: #000099;
- border-bottom: 1px SOLID #9090b0;
text-decoration: none;
}
@@ -2006,7 +1944,7 @@
}
.classification {
- border: 1px SOLID gray;
+ border: 1px solid gray;
padding: 3px;
padding-left: 6px;
padding-right: 6px;
@@ -2015,8 +1953,8 @@
.quality {
width: 157px;
- background: #DDA;
- border-bottom: 1px solid #BB8;
+ background: #EEA;
+ border: 1px solid #CCCCAA;
margin: 4px;
padding: 4px;
text-align: center;
@@ -2156,7 +2094,7 @@
}
.pivot .label {
- width: 92px;
+ width: 90px;
overflow: hidden;
display: inline-block;
}
@@ -2376,94 +2314,111 @@
font-size: 85%;
}
-.hTagcloud LI + LI:before {
- content: "\0000a0"
+.new-session-sign-in {
+ width: 190px;
+ border: 1px solid #CCCCCC;
+ border-radius: 6px 6px 6px 6px;
+ -moz-border-radius: 6px 6px 6px 6px;
+ -webkit-border-bottom-left-radius: 6px;
+ -webkit-border-bottom-right-radius: 6px;
}
-.link_list {
- padding: 0;
- margin: 0;
+div.deprecation_event {
+ border: 1px solid #e24a3e;
+ background-color: #ffcccc;
+ padding: 0.5em;
+ border-radius: 3px;
+ margin-bottom: 1em;
}
-.link_list LI {
- list-style: none;
- display: inline;
- padding: 0;
- margin: 0;
- white-space: nowrap;
+input[type="radio"], input[type="checkbox"] {
+ vertical-align: top;
}
-.link_list LI + LI:before {
- content: "\0000a0";
+.resource_list_item {
+ border: 1px solid #ccc;
+ background-color: #F5F5F5;
+ padding: 0.5em;
+ margin-bottom: 0.5em;
+ overflow: auto;
}
-OL.activity-feed {
- margin: 0;
+.resource_list_item p {
+ font-size: 85%;
}
-.activity-feed LI {
- list-style: none;
+.resource_list_item p.title {
+ font-size: 100%;
}
-.activity-feed LI + LI {
- border-top: 1px SOLID #E0E0E0;
+.resource_list_item .avatar_panel {
+ width: 6em;
+ float: left;
+ text-align: center;
}
-
-DIV.activity IMG.framed {
- border: 0;
- padding: 0;
+.resource_list_item .main_panel {
+ margin-left: 6.5em;
}
-.activity {
- padding-top: 12px;
- padding-bottom: 12px;
-}
-
-.activity .avatar-column {
- width: 64px;
+.resource_list_item .main_panel .preview {
float: left;
+ margin: 0 0.5em 0.2em 0;
}
-.activity .activity-column {
- margin-left: 72px;
+.resource_list_item .main_panel .desc {
+ border: 1px dotted #999999;
+ margin: 0.5em 0;
+ padding: 0.4em 0.6em;
+ background-color: #FFFFCC;
+ text-align: left;
+ line-height: 1.3;
+ overflow: hidden;
+ word-wrap: break-word;
}
-.activity .actions {
- font-size: 8pt;
+.resource_list_item .actions {
+ float: right;
+ text-align: left;
+ border: 1px solid #ccc;
+ background-color: #fff;
+ padding: 0.5em 0.25em 0.25em 0.25em;
+ margin: 0 0 0.5em 0.5em;
+ min-width: 6em;
}
-
-.activity .date {
- color: gray;
+.resource_list_item .actions a {
+ display: block;
+ border-bottom: 0px solid #999999;
+ margin-bottom: 0.3em;
+ font-size: 85%;
+ font-weight: normal;
}
-.activity SPAN + SPAN:before {
- content: " · ";
- color: gray;
+span.owner {
+ font-weight: bold;
}
-.inset-preview {
- float: left;
- margin-right: 16px;
- margin-bottom: 16px;
+div.avatar {
+ text-align:center;
+ padding: 0.2em 0;
+ margin: 0 auto;
}
-.inset-preview IMG {
- max-width: 200px;
+.resource_list_item p.standout {
+ font-weight: bold;
+ color: #333333;
+ font-size: 100%;
}
-.workflow-type {
+div.error {
+ width: 500px;
+ border: 2px solid #f44;
+ padding-bottom: 1em;
+ margin: 1em auto;
+ text-align: center;
}
-.metadata-datetime {
- font-size: 8pt;
+div.error h1 {
+ color: white;
+ background-color: #f44;
+ margin-top: 0;
}
-
-.new-session-sign-in {
- width: 190px;
- border: 1px solid #CCCCCC;
- border-radius: 6px 6px 6px 6px;
- -moz-border-radius: 6px 6px 6px 6px;
- -webkit-border-bottom-left-radius: 6px;
- -webkit-border-bottom-right-radius: 6px;
-}
-
Property changes: branches/events/script/about
Added: svn:executable
Property changes: branches/events/script/console
Added: svn:executable
Property changes: branches/events/script/destroy
Added: svn:executable
Property changes: branches/events/script/generate
Added: svn:executable
Property changes: branches/events/script/plugin
Added: svn:executable
Property changes: branches/events/script/runner
Added: svn:executable
Property changes: branches/events/script/server
Added: svn:executable
Modified: branches/events/test/fixtures/blob_versions.yml (3490 => 3491)
--- branches/events/test/fixtures/blob_versions.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/blob_versions.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -72,3 +72,27 @@
content_type_id: 1
content_blob_id: 1
+group_file_one_v1:
+ id: 7
+ blob_id: 7
+ version: 1
+ revision_comments: some revision comment
+ local_name: file_picture.png
+ title: for protected policy
+ body: some text
+ created_at: 2008-04-22 15:32:01
+ content_type_id: 1
+ content_blob_id: 1
+
+group_file_two_v1:
+ id: 8
+ blob_id: 8
+ version: 1
+ revision_comments: some revision comment
+ local_name: file_picture.png
+ title: for protected policy
+ body: some text
+ created_at: 2008-04-22 15:32:01
+ content_type_id: 1
+ content_blob_id: 1
+
Modified: branches/events/test/fixtures/blobs.yml (3490 => 3491)
--- branches/events/test/fixtures/blobs.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/blobs.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -78,3 +78,29 @@
content_type_id: 1
content_blob_id: 1
+group_file_one:
+ id: 7
+ current_version: 1
+ contributor_id: 1
+ contributor_type: User
+ local_name: file_picture.png
+ title: A file with a Group Policy
+ body: some text
+ created_at: 2008-04-22 15:32:01
+ license_id: 2
+ content_type_id: 1
+ content_blob_id: 1
+
+group_file_two:
+ id: 8
+ current_version: 1
+ contributor_id: 1
+ contributor_type: User
+ local_name: file_picture.png
+ title: Another file with a Group Policy
+ body: some text
+ created_at: 2008-04-22 15:32:01
+ license_id: 2
+ content_type_id: 1
+ content_blob_id: 1
+
Deleted: branches/events/test/fixtures/blog_posts.yml (3490 => 3491)
--- branches/events/test/fixtures/blog_posts.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/blog_posts.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,15 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-one:
- id: 1
- blog_id: 1
- title: MyString
- body: MyText
- created_at: 2007-08-16 11:22:32
- updated_at: 2007-08-16 11:22:32
-two:
- id: 2
- blog_id: 1
- title: MyString
- body: MyText
- created_at: 2007-08-16 11:22:32
- updated_at: 2007-08-16 11:22:32
Deleted: branches/events/test/fixtures/blogs.yml (3490 => 3491)
--- branches/events/test/fixtures/blogs.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/blogs.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,11 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-one:
- id: 1
- contributor_id: 1
- contributor_type: MyString
- title: MyString
-two:
- id: 2
- contributor_id: 1
- contributor_type: MyString
- title: MyString
Modified: branches/events/test/fixtures/content_blobs.yml (3490 => 3491)
--- branches/events/test/fixtures/content_blobs.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/content_blobs.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -2,7 +2,7 @@
# or http://www.realityforge.org/articles/2006/04/06/loading-binary-data-into-rails-fixtures
<%
def load_blob_data(name)
- filename = "#{RAILS_ROOT}/test/fixtures/files/#{name}"
+ filename = "#{Rails.root}/test/fixtures/files/#{name}"
data = ""
"!binary | #{[data].pack('m').gsub(/\n/,"\n ")}\n"
end
@@ -24,3 +24,6 @@
id: 4
data: <%= load_blob_data('workflow_branch_choice.xml') %>
+component_workflow_blob:
+ id: 5
+ data: <%= load_blob_data('image_to_tiff_migration.t2flow') %>
Modified: branches/events/test/fixtures/contributions.yml (3490 => 3491)
--- branches/events/test/fixtures/contributions.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/contributions.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -111,11 +111,47 @@
id: 10
contributor_id: 1
contributor_type: User
- contributable_id: 6
+ contributable_id: 7
contributable_type: Blob
- policy_id: 6
+ policy_id: 7
created_at: 2007-08-07 23:53:46
updated_at: 2007-08-07 23:53:46
downloads_count: 1
viewings_count: 1
+contribution_for_group_file_one:
+ id: 11
+ contributor_id: 1
+ contributor_type: User
+ contributable_id: 8
+ contributable_type: Blob
+ policy_id: 7
+ created_at: 2007-08-07 23:53:46
+ updated_at: 2007-08-07 23:53:46
+ downloads_count: 1
+ viewings_count: 1
+
+contribution_for_component_workflow:
+ id: 12
+ contributor_id: 1
+ contributor_type: User
+ contributable_id: 3
+ contributable_type: Workflow
+ policy_id: 9
+ created_at: 2008-08-07 23:53:46
+ updated_at: 2008-08-07 23:53:46
+ downloads_count: 1
+ viewings_count: 1
+
+contribution_for_component_workflow2:
+ id: 13
+ contributor_id: 2
+ contributor_type: User
+ contributable_id: 4
+ contributable_type: Workflow
+ policy_id: 10
+ created_at: 2008-08-07 23:53:46
+ updated_at: 2008-08-07 23:53:46
+ downloads_count: 1
+ viewings_count: 1
+
Copied: branches/events/test/fixtures/files/image_to_tiff_migration.t2flow (from rev 3490, trunk/test/fixtures/files/image_to_tiff_migration.t2flow) (0 => 3491)
--- branches/events/test/fixtures/files/image_to_tiff_migration.t2flow (rev 0)
+++ branches/events/test/fixtures/files/image_to_tiff_migration.t2flow 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,278 @@
+<workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.4.0"><dataflow id="16841f82-e1fe-4527-b7ef-411c4c59493b" role="top"><name>Image_to_tiff_migrat</name><inputPorts><port><name>from_uri</name><depth>0</depth><granularDepth>0</granularDepth><annotations><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.FreeTextDescription">
+ <text>description</text>
+ </annotationBean>
+ <date>2012-11-16 16:22:56.977 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.ExampleValue">
+ <text>example</text>
+ </annotationBean>
+ <date>2012-11-16 16:22:43.712 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.SemanticAnnotation">
+ <mimeType>text/rdf+n3</mimeType>
+ <content>[] <http://scape-project.eu/pc/vocab/profiles#hasPortType>
+ <http://scape-project.eu/pc/vocab/profiles#FromURIPort> .
+</content>
+ </annotationBean>
+ <date>2012-11-19 15:53:49.250 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations></port><port><name>to_uri</name><depth>0</depth><granularDepth>0</granularDepth><annotations><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.SemanticAnnotation">
+ <mimeType>text/rdf+n3</mimeType>
+ <content>[] <http://scape-project.eu/pc/vocab/profiles#hasPortType>
+ <http://scape-project.eu/pc/vocab/profiles#ToURIPort> .
+</content>
+ </annotationBean>
+ <date>2012-11-20 12:09:41.928 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations></port></inputPorts><outputPorts /><processors><processor><name>Tool</name><inputPorts><port><name>to_uri</name><depth>0</depth></port><port><name>from_uri</name><depth>0</depth></port></inputPorts><outputPorts /><annotations><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.SemanticAnnotation">
+ <mimeType>text/rdf+n3</mimeType>
+ <content>[] <http://scape-project.eu/pc/vocab/profiles#hasDependency>
+ <http://scape-project.eu/pc/vocab/profiles#imagemagick-image2tiff> .
+</content>
+ </annotationBean>
+ <date>2012-11-20 12:17:37.420 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>external-tool-activity</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.activities.externaltool.ExternalToolActivity</class><inputMap><map from="to_uri" to="to_uri" /><map from="from_uri" to="from_uri" /></inputMap><outputMap /><configBean encoding="xstream"><net.sf.taverna.t2.activities.externaltool.ExternalToolActivityConfigurationBean xmlns="">
+ <mechanismType>789663B8-DA91-428A-9F7D-B3F3DA185FD4</mechanismType>
+ <mechanismName>default local</mechanismName>
+ <mechanismXML><?xml version="1.0" encoding="UTF-8"?>
+<localInvocation><shellPrefix>/bin/sh -c</shellPrefix><linkCommand>/bin/ln -s %%PATH_TO_ORIGINAL%% %%TARGET_NAME%%</linkCommand></localInvocation>
+</mechanismXML>
+ <externaltoolid>1c6b3cec-667d-4364-8a77-315a3b3c71f8</externaltoolid>
+ <useCaseDescription>
+ <usecaseid />
+ <description />
+ <command>convert %%from_uri%% tiff:%%to_uri%%</command>
+ <preparingTimeoutInSeconds>1200</preparingTimeoutInSeconds>
+ <executionTimeoutInSeconds>1800</executionTimeoutInSeconds>
+ <tags>
+ <string>from_uri</string>
+ <string>to_uri</string>
+ </tags>
+ <REs />
+ <queue__preferred />
+ <queue__deny />
+ <static__inputs />
+ <inputs>
+ <entry>
+ <string>to_uri</string>
+ <de.uni__luebeck.inb.knowarc.usecases.ScriptInputUser>
+ <tag>to_uri</tag>
+ <file>false</file>
+ <tempFile>false</tempFile>
+ <binary>false</binary>
+ <charsetName>MacRoman</charsetName>
+ <forceCopy>false</forceCopy>
+ <list>false</list>
+ <concatenate>false</concatenate>
+ <mime />
+ </de.uni__luebeck.inb.knowarc.usecases.ScriptInputUser>
+ </entry>
+ <entry>
+ <string>from_uri</string>
+ <de.uni__luebeck.inb.knowarc.usecases.ScriptInputUser>
+ <tag>from_uri</tag>
+ <file>false</file>
+ <tempFile>false</tempFile>
+ <binary>false</binary>
+ <charsetName>MacRoman</charsetName>
+ <forceCopy>false</forceCopy>
+ <list>false</list>
+ <concatenate>false</concatenate>
+ <mime />
+ </de.uni__luebeck.inb.knowarc.usecases.ScriptInputUser>
+ </entry>
+ </inputs>
+ <outputs />
+ <includeStdIn>false</includeStdIn>
+ <includeStdOut>true</includeStdOut>
+ <includeStdErr>true</includeStdErr>
+ <validReturnCodes>
+ <int>0</int>
+ </validReturnCodes>
+ </useCaseDescription>
+ <edited>false</edited>
+</net.sf.taverna.t2.activities.externaltool.ExternalToolActivityConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class><configBean encoding="xstream"><net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+ <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class><configBean encoding="xstream"><null xmlns="" /></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class><configBean encoding="xstream"><null xmlns="" /></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class><configBean encoding="xstream"><net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+ <backoffFactor>1.0</backoffFactor>
+ <initialDelay>1000</initialDelay>
+ <maxDelay>5000</maxDelay>
+ <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class><configBean encoding="xstream"><null xmlns="" /></configBean></dispatchLayer></dispatchStack><iterationStrategyStack><iteration><strategy><cross><port name="to_uri" depth="0" /><port name="from_uri" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor></processors><conditions /><datalinks><datalink><sink type="processor"><processor>Tool</processor><port>to_uri</port></sink><source type="dataflow"><port>to_uri</port></source></datalink><datalink><sink type="processor"><processor>Tool</processor><port>from_uri</port></sink><source type="dataflow"><port>from_uri</port></source></datalink></datalinks><annotations><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.FreeTextDescription">
+ <text>SCAPE Migration Components that converts any ImageMagick supported image format to TIFF</text>
+ </annotationBean>
+ <date>2012-11-15 13:07:59.763 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
+ <identification>fd401dac-c521-4d94-8014-8efeba355d7a</identification>
+ </annotationBean>
+ <date>2012-11-19 15:55:14.145 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
+ <identification>22bc577f-9a74-4981-8725-c3b4ac28d88b</identification>
+ </annotationBean>
+ <date>2012-11-20 12:10:07.110 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
+ <identification>052219d1-09ed-4c6b-a5a4-2bad004a10ed</identification>
+ </annotationBean>
+ <date>2012-11-19 16:17:25.295 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
+ <identification>5abab48b-a3f0-4f14-9894-e824a2fa5966</identification>
+ </annotationBean>
+ <date>2012-11-16 16:39:00.691 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.Author">
+ <text>David Withers</text>
+ </annotationBean>
+ <date>2012-11-15 12:25:42.359 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
+ <identification>b5361a0e-6abd-4070-8655-5dd7b4237576</identification>
+ </annotationBean>
+ <date>2012-11-15 13:36:38.115 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
+ <identification>2bec9695-c132-4728-988c-c3a03ddcc78d</identification>
+ </annotationBean>
+ <date>2012-11-15 13:08:31.374 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
+ <identification>0d60174b-0d75-481d-8b4d-194c6109bc96</identification>
+ </annotationBean>
+ <date>2012-11-20 12:17:54.280 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.SemanticAnnotation">
+ <mimeType>text/rdf+n3</mimeType>
+ <content>[] <http://scape-project.eu/pc/vocab/profiles#hasMigrationPath>
+ <http://scape-project.eu/pc/vocab/profiles#jpegToTiff> .
+</content>
+ </annotationBean>
+ <date>2012-11-20 12:17:49.904 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
+ <identification>16841f82-e1fe-4527-b7ef-411c4c59493b</identification>
+ </annotationBean>
+ <date>2012-11-21 11:00:56.248 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
+ <identification>a5aee4f0-01d8-4ae3-96f0-c992b8d40af2</identification>
+ </annotationBean>
+ <date>2012-11-15 13:14:14.243 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
+ <annotationAssertions>
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.DescriptiveTitle">
+ <text>Image to tiff migration action</text>
+ </annotationBean>
+ <date>2012-11-21 11:00:54.84 UTC</date>
+ <creators />
+ <curationEventList />
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
+ </annotationAssertions>
+</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain></annotations></dataflow></workflow>
\ No newline at end of file
Modified: branches/events/test/fixtures/permissions.yml (3490 => 3491)
--- branches/events/test/fixtures/permissions.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/permissions.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -43,3 +43,13 @@
created_at: 2008-04-06 14:13:12
updated_at: 2008-04-06 14:13:12
+permission_for_group_policy:
+ id: 5
+ contributor_id: 4
+ contributor_type: Network
+ policy_id: 7
+ download: true
+ edit: true
+ view: true
+ created_at: 2008-04-06 14:13:12
+ updated_at: 2008-04-06 14:13:12
\ No newline at end of file
Modified: branches/events/test/fixtures/pictures.yml (3490 => 3491)
--- branches/events/test/fixtures/pictures.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/pictures.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -4,7 +4,7 @@
# or http://www.realityforge.org/articles/2006/04/06/loading-binary-data-into-rails-fixtures
<%
def load_blob_data(name)
- filename = "#{RAILS_ROOT}/test/fixtures/files/#{name}"
+ filename = "#{Rails.root}/test/fixtures/files/#{name}"
data = ""
"!binary | #{[data].pack('m').gsub(/\n/,"\n ")}\n"
end
Modified: branches/events/test/fixtures/policies.yml (3490 => 3491)
--- branches/events/test/fixtures/policies.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/policies.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -59,3 +59,42 @@
created_at: 2007-10-22 18:54:22
updated_at: 2008-01-09 12:12:12
+group_policy:
+ id: 7
+ contributor_id: 4
+ contributor_type: Network
+ name: Group Policy
+ share_mode: 0
+ update_mode: 0
+ created_at: 2007-10-22 18:54:22
+ updated_at: 2008-01-09 12:12:12
+
+unused_group_policy:
+ id: 8
+ contributor_id: 4
+ contributor_type: Network
+ name: Unused Group Policy
+ share_mode: 0
+ update_mode: 0
+ created_at: 2007-10-22 18:54:22
+ updated_at: 2008-01-09 12:12:12
+
+component_workflow_policy:
+ id: 9
+ contributor_id: 1
+ contributor_type: User
+ name: auto
+ share_mode: 0
+ update_mode: 0
+ created_at: 2007-10-22 18:54:22
+ updated_at: 2008-01-09 12:12:12
+
+component_workflow_policy2:
+ id: 10
+ contributor_id: 2
+ contributor_type: User
+ name: auto
+ share_mode: 0
+ update_mode: 0
+ created_at: 2007-10-22 18:54:22
+ updated_at: 2008-01-09 12:12:12
\ No newline at end of file
Copied: branches/events/test/fixtures/semantic_annotations.yml (from rev 3490, trunk/test/fixtures/semantic_annotations.yml) (0 => 3491)
--- branches/events/test/fixtures/semantic_annotations.yml (rev 0)
+++ branches/events/test/fixtures/semantic_annotations.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,36 @@
+has_migration_path:
+ subject_id: 3
+ subject_type: Workflow
+ predicate: http://scape-project.eu/pc/vocab/profiles#hasMigrationPath
+ object: http://scape-project.eu/pc/vocab/profiles#jpegToTiff
+
+has_dependency:
+ subject_id: 1
+ subject_type: WorkflowProcessor
+ predicate: http://scape-project.eu/pc/vocab/profiles#hasDependency
+ object: http://scape-project.eu/pc/vocab/profiles#imagemagick-image2tiff
+
+has_port_type_from:
+ subject_id: 1
+ subject_type: WorkflowPort
+ predicate: http://scape-project.eu/pc/vocab/profiles#hasPortType
+ object: http://scape-project.eu/pc/vocab/profiles#FromURIPort
+
+has_port_type_to:
+ subject_id: 2
+ subject_type: WorkflowPort
+ predicate: http://scape-project.eu/pc/vocab/profiles#hasPortType
+ object: http://scape-project.eu/pc/vocab/profiles#ToURIPort
+
+has_port_type_from2:
+ subject_id: 3
+ subject_type: WorkflowPort
+ predicate: http://scape-project.eu/pc/vocab/profiles#hasPortType
+ object: http://scape-project.eu/pc/vocab/profiles#FromURIPort
+
+second_port_annotation:
+ subject_id: 3
+ subject_type: WorkflowPort
+ predicate: http://scape-project.eu/pc/vocab/profiles#hasFish
+ object: http://scape-project.eu/pc/vocab/profiles#CornishSardine
+
Modified: branches/events/test/fixtures/taverna_enactors.yml (3490 => 3491)
--- branches/events/test/fixtures/taverna_enactors.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/taverna_enactors.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -7,7 +7,7 @@
contributor_type: User
url: http://rpc269.cs.man.ac.uk:8180/remotetaverna/v1/
username: user
- crypted_password: password # password should be put through an encrypt function before being stored in the DB
+ password: password # password should be put through an encrypt function before being stored in the DB
created_at: 2008-01-06 17:52:45
updated_at: 2008-01-06 17:52:45
@@ -19,6 +19,6 @@
contributor_type: User
url: http://rpc269.cs.man.ac.uk:8180/remotetaverna/v1/
username: user
- crypted_password: password # password should be put through an encrypt function before being stored in the DB
+ password: password # password should be put through an encrypt function before being stored in the DB
created_at: 2008-04-28 23:19:35
updated_at: 2008-04-28 23:19:35
Copied: branches/events/test/fixtures/workflow_ports.yml (from rev 3490, trunk/test/fixtures/workflow_ports.yml) (0 => 3491)
--- branches/events/test/fixtures/workflow_ports.yml (rev 0)
+++ branches/events/test/fixtures/workflow_ports.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,18 @@
+# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
+from_uri_port:
+ id: 1
+ name: from_uri
+ port_type: input
+ workflow_id: 3
+
+to_uri_port:
+ id: 2
+ name: to_uri
+ port_type: input
+ workflow_id: 3
+
+single_port:
+ id: 3
+ name: from_uri
+ port_type: input
+ workflow_id: 4
\ No newline at end of file
Copied: branches/events/test/fixtures/workflow_processors.yml (from rev 3490, trunk/test/fixtures/workflow_processors.yml) (0 => 3491)
--- branches/events/test/fixtures/workflow_processors.yml (rev 0)
+++ branches/events/test/fixtures/workflow_processors.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,5 @@
+# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
+migration_tool:
+ id: 1
+ name: Tool
+ workflow_id: 3
Modified: branches/events/test/fixtures/workflows.yml (3490 => 3491)
--- branches/events/test/fixtures/workflows.yml 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/fixtures/workflows.yml 2013-04-03 15:44:21 UTC (rev 3491)
@@ -26,3 +26,32 @@
current_version: 1
content_type_id: 3
content_blob_id: 4
+
+component_workflow:
+ id: 3
+ contributor_id: 1
+ contributor_type: User
+ title: Image to TIFF Migration Component
+ unique_name: image_to_tiff
+ body: Component thing with annotations
+ created_at: 2008-04-11 22:19:33
+ updated_at: 2008-05-14 06:45:08
+ license_id: 2
+ current_version: 1
+ content_type_id: 4
+ content_blob_id: 5
+
+component_workflow2:
+ id: 4
+ contributor_id: 2
+ contributor_type: User
+ title: Another Component
+ unique_name: component_workflow
+ body: Second component thing with annotations
+ created_at: 2008-04-11 22:19:33
+ updated_at: 2008-05-14 06:45:08
+ license_id: 2
+ current_version: 1
+ content_type_id: 4
+ content_blob_id: 5
+
Modified: branches/events/test/functional/api_controller_test.rb (3490 => 3491)
--- branches/events/test/functional/api_controller_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/functional/api_controller_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,7 +1,7 @@
require File.dirname(__FILE__) + '/../test_helper'
require 'api_controller'
require 'xml/libxml'
-require 'lib/rest'
+require 'rest'
include ActionView::Helpers::UrlHelper
include ActionController::UrlWriter
@@ -236,6 +236,7 @@
<title>#{title}</title>
<description>#{description}</description>
<license-type>#{license_type}</license-type>
+ <filename>test.txt</filename>
<content-type>#{content_type}</content-type>
<content>#{content}</content>
</file>")
@@ -1130,6 +1131,74 @@
assert_response(:not_found)
end
+ # component querying
+
+ def test_basic_component_query
+ login_as(:john)
+
+ resp = rest_request(:get, 'components', nil, {"input" => {"0" => '"http://scape-project.eu/pc/vocab/profiles#hasPortType http://scape-project.eu/pc/vocab/profiles#FromURIPort"'}})
+
+ assert_response(:success)
+ assert_equal 2, resp.find('//workflow').size
+ assert_equal [3,4], resp.find('//workflow').map {|w| w['uri'].split('?id=').last.to_i}
+ end
+
+ def test_two_annotation_component_query
+ login_as(:john)
+
+ anns = '"http://scape-project.eu/pc/vocab/profiles#hasPortType http://scape-project.eu/pc/vocab/profiles#FromURIPort"' +
+ ',"http://scape-project.eu/pc/vocab/profiles#hasFish http://scape-project.eu/pc/vocab/profiles#CornishSardine"'
+ resp = rest_request(:get, 'components', nil, {"input" => {"0" => anns}})
+
+ assert_response(:success)
+ assert_equal 1, resp.find('//workflow').size
+ assert_equal 4, resp.find('//workflow').first['uri'].split('?id=').last.to_i
+ end
+
+ def test_two_feature_component_query
+ login_as(:john)
+
+ resp = rest_request(:get, 'components', nil, {'input' => {'0' => '"http://scape-project.eu/pc/vocab/profiles#hasPortType http://scape-project.eu/pc/vocab/profiles#FromURIPort"',
+ '1' => '"http://scape-project.eu/pc/vocab/profiles#hasPortType http://scape-project.eu/pc/vocab/profiles#ToURIPort"'}
+ })
+
+ assert_response(:success)
+ assert_equal 1, resp.find('//workflow').size
+ assert_equal 3, resp.find('//workflow').first['uri'].split('?id=').last.to_i
+ end
+
+ def test_verbose_component_query
+ login_as(:john)
+
+ resp = rest_request(:get, 'components', nil, {'input' => {'0' => '"http://scape-project.eu/pc/vocab/profiles#hasPortType http://scape-project.eu/pc/vocab/profiles#FromURIPort"',
+ '1' => '"http://scape-project.eu/pc/vocab/profiles#hasPortType http://scape-project.eu/pc/vocab/profiles#ToURIPort"'},
+ 'processor' => {'0' => '"http://scape-project.eu/pc/vocab/profiles#hasDependency http://scape-project.eu/pc/vocab/profiles#imagemagick-image2tiff"'},
+ 'annotations' => '"http://scape-project.eu/pc/vocab/profiles#hasMigrationPath http://scape-project.eu/pc/vocab/profiles#jpegToTiff"'
+ })
+
+ assert_response(:success)
+ assert_equal 1, resp.find('//workflow').size
+ assert_equal 3, resp.find('//workflow').first['uri'].split('?id=').last.to_i
+ end
+
+ def test_component_query_with_filters
+ login_as(:john)
+
+ resp = rest_request(:get, 'components', nil, {"input" => {"0" => '"http://scape-project.eu/pc/vocab/profiles#hasPortType http://scape-project.eu/pc/vocab/profiles#FromURIPort"'},
+ "filter" => 'USER_ID("2")'})
+
+ assert_response(:success)
+ assert_equal 1, resp.find('//workflow').size
+ assert_equal 4, resp.find('//workflow').last['uri'].split('?id=').last.to_i
+
+ resp = rest_request(:get, 'components', nil, {"input" => {"0" => '"http://scape-project.eu/pc/vocab/profiles#hasPortType http://scape-project.eu/pc/vocab/profiles#FromURIPort"'},
+ "filter" => 'USER_ID("1")'})
+
+ assert_response(:success)
+ assert_equal 1, resp.find('//workflow').size
+ assert_equal 3, resp.find('//workflow').last['uri'].split('?id=').last.to_i
+ end
+
private
def rest_request(method, uri, data = "" query = {})
Modified: branches/events/test/functional/blobs_controller_test.rb (3490 => 3491)
--- branches/events/test/functional/blobs_controller_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/functional/blobs_controller_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -68,4 +68,46 @@
assert_equal old_count-1, Blob.count
assert_redirected_to blobs_path
end
+
+ def test_should_apply_group_policy
+ login_as(:john)
+ old_policy_id = policies(:john_policy).id
+ assert_difference("Policy.count", -1) do
+ put :update, :id => 1, :blob => { :title => 'Test blob - updated', :body => 'updated test test test' },
+ :credits_me => 'false',
+ :credits_users => '',
+ :credits_groups => '',
+ :attributions_workflows => '',
+ :attributions_files => '',
+ :policy_type => "group",
+ :group_policy => "7"
+
+ assert_redirected_to blob_path(assigns(:blob))
+ assert_equal 7, assigns(:blob).contribution.policy_id
+ assert_nil Policy.find_by_id(old_policy_id) # Old, custom policy should be deleted
+ end
+ end
+
+ def test_should_apply_custom_policy
+ login_as(:john)
+
+ blob = blobs(:group_file_one)
+
+ assert_difference("Policy.count", 1) do
+ put :update, :id => blob.id, :blob => { :title => 'Updated', :body => 'updated test test test' },
+ :credits_me => 'false',
+ :credits_users => '',
+ :credits_groups => '',
+ :attributions_workflows => '',
+ :attributions_files => '',
+ :policy_type => "custom",
+ :sharing => {:class_id => "1"},
+ :updating => {:class_id => "1"}
+ assert_not_equal 7, assigns(:blob).contribution.policy_id
+ assert_equal 7, blobs(:group_file_two).contribution.policy_id
+ assert_equal 0, blobs(:group_file_two).contribution.policy.share_mode
+ assert_equal 1, assigns(:blob).contribution.policy.share_mode
+ end
+
+ end
end
Deleted: branches/events/test/functional/blog_posts_controller_test.rb (3490 => 3491)
--- branches/events/test/functional/blog_posts_controller_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/functional/blog_posts_controller_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,15 +0,0 @@
-# myExperiment: test/functional/blog_posts_controller_test.rb
-#
-# Copyright (c) 2007 University of Manchester and the University of Southampton.
-# See license.txt for details.
-
-require File.dirname(__FILE__) + '/../test_helper'
-require 'blog_posts_controller'
-
-class BlogPostsControllerTest < ActionController::TestCase
-
- def test_true
- assert true
- end
-
-end
Deleted: branches/events/test/functional/blogs_controller_test.rb (3490 => 3491)
--- branches/events/test/functional/blogs_controller_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/functional/blogs_controller_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,15 +0,0 @@
-# myExperiment: test/functional/blogs_controller_test.rb
-#
-# Copyright (c) 2007 University of Manchester and the University of Southampton.
-# See license.txt for details.
-
-require File.dirname(__FILE__) + '/../test_helper'
-require 'blogs_controller'
-
-class BlogsControllerTest < ActionController::TestCase
-
- def test_true
- assert true
- end
-
-end
Modified: branches/events/test/functional/citations_controller_test.rb (3490 => 3491)
--- branches/events/test/functional/citations_controller_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/functional/citations_controller_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -55,7 +55,6 @@
:authors => 'John and Jane and jim',
:published_at => '2008-08-08' }
- assert "Citation was successfully updated.", flash[:notice]
assert_response :success
end
Copied: branches/events/test/functional/group_policies_controller_test.rb (from rev 3490, trunk/test/functional/group_policies_controller_test.rb) (0 => 3491)
--- branches/events/test/functional/group_policies_controller_test.rb (rev 0)
+++ branches/events/test/functional/group_policies_controller_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1,59 @@
+require File.dirname(__FILE__) + '/../test_helper'
+require 'group_policies_controller'
+
+class GroupPoliciesControllerTest < ActionController::TestCase
+ fixtures :policies, :blobs, :permissions, :networks, :users
+
+ def test_administrators_can_view
+ login_as(:john)
+ get :index, :network_id => networks(:exclusive_network).id
+ assert_response :success
+ end
+
+ def test_non_admins_cannot_view
+ login_as(:jane)
+ get :index, :network_id => networks(:exclusive_network).id
+ assert_response :redirect
+ end
+
+ def test_can_create
+ login_as(:john)
+
+ assert_difference("Policy.count", 1) do
+ post :create, :network_id => networks(:exclusive_network).id,
+ :name => "New Policy", :share_mode => 0
+ end
+ end
+
+ def test_can_delete_if_not_used
+ login_as(:john)
+
+ assert_difference("Policy.count", -1) do
+ delete :destroy, :network_id => networks(:exclusive_network).id, :id => policies(:unused_group_policy).id
+ assert_response :redirect
+ end
+ end
+
+ def test_cannot_delete_if_used
+ login_as(:john)
+
+ assert_no_difference("Policy.count") do
+ delete :destroy, :network_id => networks(:exclusive_network).id, :id => policies(:group_policy).id
+ assert_response :redirect
+ end
+ end
+
+ def test_can_update
+ login_as(:john)
+
+ assert_equal 0, policies(:group_policy).share_mode
+
+ put :update, :network_id => networks(:exclusive_network).id, :id => policies(:group_policy).id,
+ :share_mode => 2
+
+ assert_response :success
+
+ assert_equal 2, assigns(:policy).share_mode
+ end
+
+end
\ No newline at end of file
Modified: branches/events/test/functional/networks_controller_test.rb (3490 => 3491)
--- branches/events/test/functional/networks_controller_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/functional/networks_controller_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -26,7 +26,7 @@
old_count = Network.count
login_as(:john)
- post :create, :network => { :user_id => '990', :title => 'test network', :unique_name => 'test_network', :new_member_policy => 'open', :description => "..." }
+ post :create, :network => { :title => 'test network', :unique_name => 'test_network', :new_member_policy => 'open', :description => "..." }
assert_equal old_count+1, Network.count
assert_redirected_to network_path(assigns(:network))
@@ -47,7 +47,7 @@
def test_should_update_network
login_as(:john)
put :update, :id => 1,
- :network => { :user_id => '990', :title => 'test network', :unique_name => 'update_network', :new_member_policy => 'open', :description => ".?."}
+ :network => { :title => 'test network', :unique_name => 'update_network', :new_member_policy => 'open', :description => ".?."}
assert_redirected_to network_path(assigns(:network))
end
Modified: branches/events/test/functional/packs_controller_test.rb (3490 => 3491)
--- branches/events/test/functional/packs_controller_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/functional/packs_controller_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -39,7 +39,7 @@
num_packs = Pack.count
login_as(:john)
- post :create, :pack => { :title => 'my new pack', :description => 'a new pack lalalala' }
+ post :create, :pack => { :title => 'my new pack', :description => 'a new pack lalalala', :license_id => '2' }
assert_response :redirect
assert_redirected_to(pack_url(assigns(:pack)))
@@ -60,7 +60,8 @@
def test_update
login_as(:john)
- post :update, :id => @first_id, :pack => { :title => 'edited pack', :description => 'a new pack' }
+ post :update, :id => @first_id, :pack => { :title => 'edited pack', :description => 'a new pack',
+ :license_id => '3' }
assert_response :redirect
assert_redirected_to :action ="" 'show', :id => @first_id
Modified: branches/events/test/functional/profiles_controller_test.rb (3490 => 3491)
--- branches/events/test/functional/profiles_controller_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/functional/profiles_controller_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -9,12 +9,6 @@
class ProfilesControllerTest < ActionController::TestCase
fixtures :profiles, :users, :pictures, :picture_selections
- def test_should_get_index
- get :index
- assert_response :success
- assert assigns(:profiles)
- end
-
# would require a new user as each user is only allowed 1 profile
def test_should_get_new
#login_as(:john)
Deleted: branches/events/test/unit/blog_post_test.rb (3490 => 3491)
--- branches/events/test/unit/blog_post_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/unit/blog_post_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class BlogPostTest < ActiveSupport::TestCase
- fixtures :blog_posts
-
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
Deleted: branches/events/test/unit/blog_test.rb (3490 => 3491)
--- branches/events/test/unit/blog_test.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/test/unit/blog_test.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class BlogTest < ActiveSupport::TestCase
- fixtures :blogs
-
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
Copied: branches/events/tmp/.gitignore (from rev 3490, trunk/tmp/.gitignore) (0 => 3491)
--- branches/events/tmp/.gitignore (rev 0)
+++ branches/events/tmp/.gitignore 2013-04-03 15:44:21 UTC (rev 3491)
@@ -0,0 +1 @@
+/biocatalogue.yml
Deleted: branches/events/update.sh (3490 => 3491)
--- branches/events/update.sh 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/update.sh 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-LOG=log/update.log
-
-echo >> ${LOG} ------------------------------------------------------------
-date >> ${LOG}
-echo >> ${LOG} ------------------------------------------------------------
-echo >> ${LOG}
-
-/etc/init.d/myexperiment stop | tee -a ${LOG}
-
-echo >> ${LOG}
-
-svn update | tee -a ${LOG}
-
-echo >> ${LOG}
-
-rake db:migrate | tee -a ${LOG}
-
-echo >> ${LOG}
-
-/etc/init.d/myexperiment start | tee -a ${LOG}
-
-echo >> ${LOG}
-
Modified: branches/events/vendor/plugins/oauth/lib/oauth/request_proxy/base.rb (3490 => 3491)
--- branches/events/vendor/plugins/oauth/lib/oauth/request_proxy/base.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/vendor/plugins/oauth/lib/oauth/request_proxy/base.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -37,7 +37,7 @@
def signature_method
case parameters['oauth_signature_method']
- when Array: parameters['oauth_signature_method'].first
+ when Array; parameters['oauth_signature_method'].first
else
parameters['oauth_signature_method']
end
Deleted: branches/events/vendor/plugins/oauth/tasks/deployment.rake (3490 => 3491)
--- branches/events/vendor/plugins/oauth/tasks/deployment.rake 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/vendor/plugins/oauth/tasks/deployment.rake 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,34 +0,0 @@
-desc 'Release the website and new gem version'
-task :deploy => [:check_version, :website, :release] do
- puts "Remember to create SVN tag:"
- puts "svn copy svn+ssh://address@hidden/var/svn/#{PATH}/trunk " +
- "svn+ssh://address@hidden/var/svn/#{PATH}/tags/REL-#{VERS} "
- puts "Suggested comment:"
- puts "Tagging release #{CHANGES}"
-end
-
-desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
-task :local_deploy => [:website_generate, :install_gem]
-
-task :check_version do
- unless ENV['VERSION']
- puts 'Must pass a VERSION=x.y.z release version'
- exit
- end
- unless ENV['VERSION'] == VERS
- puts "Please update your version.rb to match the release version, currently #{VERS}"
- exit
- end
-end
-
-desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
-task :install_gem_no_doc => [:clean, :package] do
- sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
-end
-
-namespace :manifest do
- desc 'Recreate Manifest.txt to include ALL files'
- task :refresh do
- `rake check_manifest | patch -p0 > Manifest.txt`
- end
-end
\ No newline at end of file
Deleted: branches/events/vendor/plugins/oauth/tasks/environment.rake (3490 => 3491)
--- branches/events/vendor/plugins/oauth/tasks/environment.rake 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/vendor/plugins/oauth/tasks/environment.rake 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,7 +0,0 @@
-task :ruby_env do
- RUBY_APP = if RUBY_PLATFORM =~ /java/
- "jruby"
- else
- "ruby"
- end unless defined? RUBY_APP
-end
Deleted: branches/events/vendor/plugins/oauth/tasks/website.rake (3490 => 3491)
--- branches/events/vendor/plugins/oauth/tasks/website.rake 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/vendor/plugins/oauth/tasks/website.rake 2013-04-03 15:44:21 UTC (rev 3491)
@@ -1,17 +0,0 @@
-desc 'Generate website files'
-task :website_generate => :ruby_env do
- (Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
- sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
- end
-end
-
-desc 'Upload website files to rubyforge'
-task :website_upload do
- host = "address@hidden"
- remote_dir = "/var/www/gforge-projects/#{PATH}/"
- local_dir = 'website'
- sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
-end
-
-desc 'Generate and upload website files'
-task :website => [:website_generate, :website_upload, :publish_docs]
Modified: branches/events/vendor/plugins/validates_email_veracity_of/lib/validates_email_veracity_of.rb (3490 => 3491)
--- branches/events/vendor/plugins/validates_email_veracity_of/lib/validates_email_veracity_of.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/vendor/plugins/validates_email_veracity_of/lib/validates_email_veracity_of.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -75,8 +75,8 @@
# default is two.
def servers_in(record, options = {})
type = case record.to_s.downcase
- when 'exchange' : Resolv::DNS::Resource::IN::MX
- when 'address' : Resolv::DNS::Resource::IN::A
+ when 'exchange' ; Resolv::DNS::Resource::IN::MX
+ when 'address' ; Resolv::DNS::Resource::IN::A
end
st = Timeout::timeout(options.fetch(:timeout, 2)) do
Resolv::DNS.new.getresources(name, type).inject([]) do |servers, s|
Modified: branches/events/vendor/plugins/versioning/lib/versioning.rb (3490 => 3491)
--- branches/events/vendor/plugins/versioning/lib/versioning.rb 2013-03-28 10:13:34 UTC (rev 3490)
+++ branches/events/vendor/plugins/versioning/lib/versioning.rb 2013-04-03 15:44:21 UTC (rev 3491)
@@ -23,7 +23,7 @@
class_eval do
- has_many :versions, :class_name => self.version_class.name
+ has_many :versions, :class_name => self.version_class.name, :dependent => :destroy
def find_version(v)
match = self.version_class.find(:first, :conditions => ["#{self.versioned_resource_column} = ? AND version = ?", id, v])
@@ -34,7 +34,9 @@
def changed_versioned_attributes
versioned_attributes.select do |attr|
- changes[attr.to_s] || (send(attr).respond_to?(:changed) && send(attr).changed?)
+ if respond_to?(attr)
+ changes[attr.to_s] || (send(attr).respond_to?(:changed) && send(attr).changed?)
+ end
end
end