Diff
Modified: trunk/app/controllers/blobs_controller.rb (3064 => 3065)
--- trunk/app/controllers/blobs_controller.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/controllers/blobs_controller.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -7,21 +7,21 @@
include ApplicationHelper
- before_filter :login_required, :except => [:index, :show, :download, :named_download, :statistics, :search]
+ before_filter :login_required, :except => [:index, :show, :download, :named_download, :named_download_with_version, :statistics, :search]
before_filter :find_blob_auth, :except => [:search, :index, :new, :create]
before_filter :initiliase_empty_objects_for_new_pages, : [:new, :create]
before_filter :set_sharing_mode_variables, : [:show, :new, :create, :edit, :update]
- before_filter :check_is_owner, : [:edit, :update]
+ before_filter :check_is_owner, : [:edit, :update, :suggestions, :process_suggestions]
# declare sweepers and which actions should invoke them
cache_sweeper :blob_sweeper, : [ :create, :update, :destroy ]
cache_sweeper :permission_sweeper, : [ :create, :update, :destroy ]
cache_sweeper :bookmark_sweeper, : [ :destroy, :favourite, :favourite_delete ]
cache_sweeper :tag_sweeper, : [ :create, :update, :tag, :destroy ]
- cache_sweeper :download_viewing_sweeper, : [ :show, :download, :named_download ]
+ cache_sweeper :download_viewing_sweeper, : [ :show, :download, :named_download, :named_download_with_version ]
cache_sweeper :comment_sweeper, : [ :comment, :comment_delete ]
cache_sweeper :rating_sweeper, : [ :rate ]
@@ -36,7 +36,7 @@
@download = Download.create(:contribution => @blob.contribution, :user => (logged_in? ? current_user : nil), :user_agent => request.env['HTTP_USER_AGENT'], :accessed_from_site => accessed_from_website?())
end
- send_data(@blob.content_blob.data, :filename => @blob.local_name, :type => @blob.content_type.mime_type)
+ 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)
end
@@ -52,6 +52,17 @@
end
end
+ # GET /files/:id/versions/:version/download/:name
+ def named_download_with_version
+
+ # check that we got the right filename for this workflow
+ if params[:name] == @version.local_name
+ download
+ else
+ render :nothing => true, :status => "404 Not Found"
+ end
+ end
+
# GET /files
def index
respond_to do |format|
@@ -133,12 +144,8 @@
@blob = Blob.new(params[:blob])
@blob.content_blob = ContentBlob.new(:data ="" data)
- @blob.content_type = ContentType.find_by_mime_type(content_type)
+ @blob.content_type = ContentType.find_or_create_by_mime_type(:user => current_user, :mime_type => content_type, :category=> 'Blob')
- if @blob.content_type.nil?
- @blob.content_type = ContentType.create(:user_id => current_user.id, :mime_type => content_type, :title => content_type, :category => 'Blob')
- end
-
respond_to do |format|
if @blob.save
if params[:blob][:tag_list]
@@ -156,8 +163,18 @@
update_attributions(@blob, params)
if policy_err_msg.blank?
- flash[:notice] = 'File was successfully created.'
- format.html { redirect_to blob_url(@blob) }
+
+ @version = @blob.find_version(1)
+
+ format.html {
+ if @version.suggestions?
+ redirect_to(blob_version_suggestions_path(@blob, @version.version))
+ else
+ flash[:notice] = 'File was successfully created.'
+ redirect_to blob_url(@blob)
+ end
+ }
+
else
flash[:notice] = "File was successfully created. However some problems occurred, please see these below.</br></br><span style='color: red;'>" + policy_err_msg + "</span>"
format.html { redirect_to :controller => 'blobs', :id => @blob, :action ="" "edit" }
@@ -186,8 +203,14 @@
params[:blob][:license_id] = nil if params[:blob][:license_id] && params[:blob][:license_id] == "0"
- # 'Data' (ie: the actual file) cannot be updated!
- params[:blob].delete('data') if params[:blob][:data]
+ # Create a new content blob entry if new data is provided.
+ 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')
+ end
+
+ params[:blob].delete(:data)
respond_to do |format|
if @blob.update_attributes(params[:blob])
@@ -199,8 +222,21 @@
update_layout(@blob, params[:layout])
if policy_err_msg.blank?
- flash[:notice] = 'File was successfully updated.'
- format.html { redirect_to blob_url(@blob) }
+ format.html {
+
+ if @blob.new_version_number
+ @version = @blob.find_version(@blob.new_version_number)
+ else
+ @version.reload
+ end
+
+ if @version.suggestions?
+ redirect_to(blob_version_suggestions_path(@blob, @version.version))
+ else
+ flash[:notice] = 'File was successfully updated.'
+ redirect_to blob_url(@blob)
+ end
+ }
else
flash[:error] = policy_err_msg
format.html { redirect_to :controller => 'blobs', :id => @blob, :action ="" "edit" }
@@ -289,6 +325,31 @@
end
end
+ # GET /files/1/versions/1/suggestions
+ def suggestions
+ @suggestions = @version.suggestions
+ end
+
+ # POST /files/1/versions/1/process_suggestions
+ def process_suggestions
+
+ @version.revision_comments = params[:revision_comments] if params[:revision_comments]
+ @version.body = params[:description] if params[:description]
+
+ success = @version.save
+
+ respond_to do |format|
+ format.html {
+ if success
+ flash[:notice] = 'File was successfully updated.'
+ redirect_to blob_version_path(@blob, @version.version)
+ else
+ render :action ="" "suggestions"
+ end
+ }
+ end
+ end
+
protected
def find_blob_auth
@@ -298,14 +359,21 @@
if Authorization.is_authorized?(action_name, nil, blob, current_user)
@blob = blob
+ if params[:version]
+ @version = @blob.find_version(params[:version])
+ else
+ @version = @blob.versions.last
+ end
+
@blob_entry_url = url_for : false,
:host => base_host,
:id => @blob.id
- @named_download_url = url_for :controller => 'files',
- :action ="" 'named_download',
+ @named_download_url = url_for :controller => 'blobs',
+ :action ="" 'named_download_with_version',
:id => @blob.id,
- :name => @blob.local_name
+ :version => @version.version,
+ :name => @version.local_name
else
if logged_in?
Modified: trunk/app/controllers/workflows_controller.rb (3064 => 3065)
--- trunk/app/controllers/workflows_controller.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/controllers/workflows_controller.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -445,9 +445,12 @@
if @workflow.valid?
# Save content blob first now and set it on the workflow.
# TODO: wrap this in a transaction!
- @workflow.content_blob_id = ContentBlob.create(:data ="" file.read).id
- if @workflow.save_as_new_version(params[:new_workflow][:rev_comments])
+ @workflow.content_blob = ContentBlob.create(:data ="" file.read)
+ @workflow.preview = nil
+ @workflow[:revision_comments] = params[:new_workflow][:rev_comments]
+ if @workflow.save
+
# Extract workflow metadata using a Workflow object that includes the
# newly created version.
@@ -509,7 +512,7 @@
respond_to do |format|
# Here we assume that no actual workflow metadata is being updated that affects workflow versions,
# so we need to prevent the timestamping update of workflow version objects.
- Workflow.versioned_class.record_timestamps = false
+ Workflow.record_timestamps = false
if @workflow.update_attributes(params[:workflow])
@@ -536,49 +539,40 @@
format.html { render :action ="" "edit" }
end
- Workflow.versioned_class.record_timestamps = true
+ Workflow.record_timestamps = true
end
end
# PUT /workflows/1;update_version
def update_version
- workflow_title = @workflow.title
-
+
+ success = false
+
if params[:version]
- # Update differently based on whether a new preview image has been specified or not:
- # (But only set image if platform is not windows).
- if params[:workflow][:preview].blank? || params[:workflow][:preview].size == 0
- success = @workflow.update_version(params[:version],
- :title => params[:workflow][:title],
- :body => params[:workflow][:body],
- :last_edited_by => current_user.id)
- else
- logger.debug("Preview image provided. Attempting to set the version's preview image.")
-
- # Disable updating image on windows due to issues to do with file locking, that prevent file_column from working sometimes.
- #
- # The dependency on file_column has been removed, but this code remains
- # disabled on Windows until it is confirmed as working.
- if RUBY_PLATFORM =~ /mswin32/
- success = false
- else
- success = @workflow.update_version(params[:version],
- :title => params[:workflow][:title],
- :body => params[:workflow][:body],
- :image => params[:workflow][:preview].read,
- :last_edited_by => current_user.id)
- end
- end
- else
- success = false
+
+ original_title = @workflow.title
+ version = @workflow.find_version(params[:version])
+ do_preview = !params[:workflow][:preview].blank? && params[:workflow][:preview].size > 0
+
+ attributes_to_update = {
+ :title => params[:workflow][:title],
+ :body => params[:workflow][:body],
+ :last_edited_by => current_user.id
+ }
+
+ # only set the preview to update if one was provided
+
+ attributes_to_update[:image] = params[:workflow][:preview] if do_preview
+
+ success = version.update_attributes(attributes_to_update)
end
-
+
respond_to do |format|
if success
- flash[:notice] = "Workflow version #{params[:version]}: \"#{workflow_title}\" has been updated."
+ flash[:notice] = "Workflow version #{version.version}: \"#{original_title}\" has been updated."
format.html { redirect_to(workflow_url(@workflow) + "?version=#{params[:version]}") }
else
- flash[:error] = "Failed to update Workflow version."
+ flash[:error] = "Failed to update Workflow."
if params[:version]
format.html { render :action ="" :edit_version }
else
Modified: trunk/app/models/blob.rb (3064 => 3065)
--- trunk/app/models/blob.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/models/blob.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -25,6 +25,13 @@
acts_as_attributor
acts_as_attributable
+ has_versions :blob_versions,
+
+ :attributes => [ :title, :body, :body_html, :content_type, :content_blob,
+ :local_name ],
+
+ :mutable => [ :title, :body, :body_html ]
+
acts_as_solr(:fields => [:title, :local_name, :body, :kind, :uploader, :tag_list],
:boost => "rank",
:include => [ :comments ]) if Conf.solr_enable
Copied: trunk/app/models/blob_version.rb (from rev 3064, branches/versions/app/models/blob_version.rb) (0 => 3065)
--- trunk/app/models/blob_version.rb (rev 0)
+++ trunk/app/models/blob_version.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -0,0 +1,30 @@
+# myExperiment: app/models/blob_versions.rb
+#
+# Copyright (c) 2012 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+class BlobVersion < ActiveRecord::Base
+
+ is_version_of :blob
+
+ format_attribute :body
+
+ belongs_to :content_blob, :dependent => :destroy
+ belongs_to :content_type
+
+ validates_presence_of :content_blob
+ validates_presence_of :content_type
+ validates_presence_of :title
+
+ def suggestions
+ {
+ :revision_comments => version > 1 && (revision_comments.nil? || revision_comments.empty?),
+ :description => body.nil? || body.empty?
+ }
+ end
+
+ def suggestions?
+ suggestions.select do |k, v| v end.length > 0
+ end
+end
+
Modified: trunk/app/models/preview.rb (3064 => 3065)
--- trunk/app/models/preview.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/models/preview.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -7,13 +7,17 @@
PREFIX = "tmp/previews"
+ after_save :clear_cache
+
belongs_to :image_blob, :class_name => "ContentBlob",
:foreign_key => :image_blob_id,
- :dependent => :destroy
+ :dependent => :destroy,
+ :autosave => true
belongs_to :svg_blob, :class_name => "ContentBlob",
:foreign_key => :svg_blob_id,
- :dependent => :destroy
+ :dependent => :destroy,
+ :autosave => true
def file_name(type)
"#{PREFIX}/#{id}/#{type}"
Modified: trunk/app/models/topic_run.rb (3064 => 3065)
--- trunk/app/models/topic_run.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/models/topic_run.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -6,7 +6,6 @@
require 'acts_as_creditable'
require 'acts_as_attributor'
require 'acts_as_attributable'
-require 'explicit_versioning'
require 'acts_as_reviewable'
require 'acts_as_runnable'
Modified: trunk/app/models/topic_tag_map.rb (3064 => 3065)
--- trunk/app/models/topic_tag_map.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/models/topic_tag_map.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -3,7 +3,6 @@
require 'acts_as_creditable'
require 'acts_as_attributor'
require 'acts_as_attributable'
-require 'explicit_versioning'
require 'acts_as_reviewable'
require 'acts_as_runnable'
@@ -26,4 +25,4 @@
:all,
:order => 'topic_tag_map.probability DESC')
end
-end
\ No newline at end of file
+end
Modified: trunk/app/models/topic_workflow_map.rb (3064 => 3065)
--- trunk/app/models/topic_workflow_map.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/models/topic_workflow_map.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -3,7 +3,6 @@
require 'acts_as_creditable'
require 'acts_as_attributor'
require 'acts_as_attributable'
-require 'explicit_versioning'
require 'acts_as_reviewable'
require 'acts_as_runnable'
@@ -18,4 +17,4 @@
belongs_to :workflow
validates_presence_of :workflow
-end
\ No newline at end of file
+end
Modified: trunk/app/models/workflow.rb (3064 => 3065)
--- trunk/app/models/workflow.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/models/workflow.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -8,7 +8,6 @@
require 'acts_as_creditable'
require 'acts_as_attributor'
require 'acts_as_attributable'
-require 'explicit_versioning'
require 'acts_as_reviewable'
require 'acts_as_runnable'
require 'lib/previews'
@@ -49,47 +48,15 @@
has_previews
- explicit_versioning(:version_column => "current_version",
- :extra_attributes => ["image", "svg"],
- :white_list_columns => ["body"]) do
-
- format_attribute :body
+ 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 ],
- belongs_to :content_blob, :dependent => :destroy
- belongs_to :content_type
+ :mutable => [ :contributor, :title, :unique_name, :body, :body_html,
+ :file_ext, :last_edited_by, :content_type_id, :image, :svg ]
- validates_presence_of :content_blob
- validates_presence_of :content_type
-
- # Update the parent contribution model buy only if this isn't the current version (because the workflow model will take care of that).
- # This is required to keep the contribution's updated_at field accurate.
- after_save { |wv| wv.workflow.contribution.save if wv.workflow.contribution && wv.version != wv.workflow.current_version }
-
- has_previews
-
- def components
- if workflow.processor_class
- workflow.processor_class.new(content_blob.data).get_components
- else
- XML::Node.new('components')
- end
- end
-
- def processor_class
- if self.content_type
- @processor_class ||= WorkflowTypesHandler.processor_class_for_type_display_name(self.content_type.title)
- end
- end
-
- def display_data_format
- klass = self.processor_class
- @display_data_format = (klass.nil? ? self.file_ext : klass.display_data_format)
- end
-
- end
-
- non_versioned_columns.push("license_id", "tag_list", "preview_id")
-
acts_as_solr(:fields => [ :title, :body, :tag_list, :contributor_name, :kind, :get_all_search_terms ],
:boost => "rank",
:include => [ :comments ]) if Conf.solr_enable
Modified: trunk/app/models/workflow_sweeper.rb (3064 => 3065)
--- trunk/app/models/workflow_sweeper.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/models/workflow_sweeper.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -15,7 +15,7 @@
end
def after_update(workflow)
- expire_sidebar_assets(workflow.contribution.contributor_id) if workflow.contribution.contributor_type == 'User'
+ expire_sidebar_assets(workflow.contributor_id) if workflow.contributor_type == 'User'
expire_multiple_sidebar_favourites(workflow.id, 'Workflow')
expire_listing(workflow.id, 'Workflow')
expire_home_cache
Copied: trunk/app/models/workflow_version.rb (from rev 3064, branches/versions/app/models/workflow_version.rb) (0 => 3065)
--- trunk/app/models/workflow_version.rb (rev 0)
+++ trunk/app/models/workflow_version.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -0,0 +1,44 @@
+# myExperiment: app/models/workflow_version.rb
+#
+# Copyright (c) 2012 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+class WorkflowVersion < ActiveRecord::Base
+
+ is_version_of :workflow
+
+ format_attribute :body
+
+ belongs_to :content_blob, :dependent => :destroy
+ belongs_to :content_type
+
+ validates_presence_of :content_blob
+ validates_presence_of :content_type
+
+ # Update the parent contribution model buy only if this isn't the current version (because the workflow model will take care of that).
+ # This is required to keep the contribution's updated_at field accurate.
+ after_save { |wv| wv.workflow.contribution.save if wv.workflow.contribution && wv.version != wv.workflow.current_version }
+
+ has_previews
+
+ def components
+ if workflow.processor_class
+ workflow.processor_class.new(content_blob.data).get_components
+ else
+ XML::Node.new('components')
+ end
+ end
+
+ def processor_class
+ if self.content_type
+ @processor_class ||= WorkflowTypesHandler.processor_class_for_type_display_name(self.content_type.title)
+ end
+ end
+
+ def display_data_format
+ klass = self.processor_class
+ @display_data_format = (klass.nil? ? self.file_ext : klass.display_data_format)
+ end
+
+end
+
Modified: trunk/app/views/blobs/_breadcrumbs.rhtml (3064 => 3065)
--- trunk/app/views/blobs/_breadcrumbs.rhtml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/views/blobs/_breadcrumbs.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,6 +1,6 @@
<li><%= link_to 'Files', blobs_path -%></li>
-<% if ["show", "new", "edit", "all", "search"].include? controller.action_name.to_s -%>
+<% if ["show", "new", "edit", "all", "search", "suggestions"].include? controller.action_name.to_s -%>
<li>></li>
<% case controller.action_name.to_s; when "show" -%>
@@ -15,6 +15,10 @@
<li>All Files</li>
<% when "search" %>
<li>Search Results</li>
+ <% when "suggestions" %>
+ <li><%= link_to "#{contributable_name(@blob.id, 'Blob')}", blob_path(@blob) -%></li>
+ <li>></li>
+ <li>Suggestions</li>
<% else %>
<!-- no breadcrumb -->
<% end %>
Modified: trunk/app/views/blobs/edit.rhtml (3064 => 3065)
--- trunk/app/views/blobs/edit.rhtml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/views/blobs/edit.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -7,8 +7,18 @@
<%= error_messages_for :blob %>
-<% form_for(:blob, :url ="" blob_path(@blob), :html => { :method => :put }) do |f| %>
+<% form_for(:blob, :url ="" blob_path(@blob), :html => { :method => :put, :multipart => true }) do |f| %>
+ <div style="text-align: center;">
+ <div>
+ <strong>File to upload: </strong>
+ <%= file_field :blob, :data %>
+ </div>
+ <div><small><em>Leave this field blank unless you want to replace the file content</em></small></div>
+ </div>
+
+ <br/>
+
<p style="text-align: center;">
<strong>Title: </strong>
<br/>
Modified: trunk/app/views/blobs/show.rhtml (3064 => 3065)
--- trunk/app/views/blobs/show.rhtml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/views/blobs/show.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -31,12 +31,13 @@
|
<%= link_to "Favourited By (address@hidden)", "#favourited_by" %>
|
+ <br/>
+ |
+ <%= link_to("Version History", "#version_history") -%>
+ |
<% if logged_in? and @blob.owner?(current_user) %>
- <br/>
+ <a href=""
|
- <!-- NB! Index of the 'sharing' tab might change! -->
- <a href=""
- |
<% end %>
<%= link_to "Comments (address@hidden)", "#comments" %>
|
@@ -44,20 +45,23 @@
<div class="contribution_left_box">
<div class="contribution_version_box">
- <div class="contribution_version_inner_box">
+
+ <%= render(:partial => "contributions/version_selector", :locals => { :resource => @blob, :version => @version, :path => :blob_version_path }) %>
+
+ <div class="contribution_version_inner_box">
<p>
<b>Title:</b>
- <span class="title"><%=h @blob.title %></span>
+ <span class="title"><%=h @version.title %></span>
</p>
<p>
<b>File name:</b>
- <%=h @blob.local_name %>
+ <%=h @version.local_name %>
</p>
<p>
<b>File type:</b>
- <%=h @blob.content_type.title %>
+ <%=h @version.content_type.title %>
</p>
<br/>
@@ -67,9 +71,9 @@
Description
</h3>
- <% unless @blob.body.blank? %>
+ <% unless @version.body.blank? %>
<div class="contribution_description">
- <%= @blob.body_html %>
+ <%= @version.body_html %>
</div>
<% else %>
<p class="none_text">
@@ -136,14 +140,22 @@
<br/>
<div id="tabsContainer" class="tabsContainer"></div>
-
+
+<div class="tabContainer">
+ <div class="tabTitle">Version History</div>
+ <div class="tabContent">
+ <a name="version_history"></a>
+ <%= render :partial => "contributions/versions", :locals => { :resource => @blob, :path => :blob_version_path } %>
+ </div>
+</div>
+
<% if logged_in? and @blob.owner? current_user %>
- <a name="sharing"></a>
<div class="tabContainer">
<div class="tabTitle">Sharing</div>
<div class="tabContent">
+ <a name="sharing"></a>
<%= render :partial => "contributions/sharing_summary", :locals => { :contributable => @blob } %>
<%= render :partial => "contributions/updating_summary", :locals => { :contributable => @blob } %>
Modified: trunk/app/views/contributions/_citations_tab.rhtml (3064 => 3065)
--- trunk/app/views/contributions/_citations_tab.rhtml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/views/contributions/_citations_tab.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -2,6 +2,7 @@
<div class="tabTitle">Citations (<%= item.citations.length -%>)</div>
<div class="tabContent">
+ <a name="citations"></a>
<% unless (citations = item.citations).empty? %>
<% citations.each_index do |i| %>
<p>
Modified: trunk/app/views/contributions/_statistics_box.rhtml (3064 => 3065)
--- trunk/app/views/contributions/_statistics_box.rhtml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/views/contributions/_statistics_box.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -42,9 +42,7 @@
<% if allow_citations? type %>
<p>
- <!-- for this to work properly, view for every resource that supports citations will need to have -->
- <!-- tab system with 'tabsContainer' element + anchor called 'citations' -->
- <a href="" pluralize contributable.citations.count, "citation" %></a>
+ <a href="" pluralize contributable.citations.count, "citation" %></a>
</p>
<% end %>
Copied: trunk/app/views/contributions/_version_selector.rhtml (from rev 3064, branches/versions/app/views/contributions/_version_selector.rhtml) (0 => 3065)
--- trunk/app/views/contributions/_version_selector.rhtml (rev 0)
+++ trunk/app/views/contributions/_version_selector.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -0,0 +1,71 @@
+<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;">
+ <%= 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>
+ <a name="versions"></a>
+ </td>
+ <td>
+ <% if resource.versions.length > 1 %>
+ <form return false;" style="text-align: right;">
+ <b>View version: </b>
+ <select id="resource_versions"
+ <% resource.versions.reverse.each do |v| %>
+ <option value="<%= send(path, resource, v.version.to_s) %>" <%= "selected" if v.version == version.version -%>>
+ <%= "#{v.version.to_s} #{resource.describe_version(v.version)}" %>
+ </option>
+ <% end %>
+ </select>
+ </form>
+ <% end %>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <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>
+
+ <% if !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>
+
Copied: trunk/app/views/contributions/_versions.rhtml (from rev 3064, branches/versions/app/views/contributions/_versions.rhtml) (0 => 3065)
--- trunk/app/views/contributions/_versions.rhtml (rev 0)
+++ trunk/app/views/contributions/_versions.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -0,0 +1,41 @@
+<p>In chronological order:</p>
+
+<ol class="version_history">
+ <% resource.versions.each do |version| %>
+ <li>
+ <div class="title">
+ <%= link_to(version.title, send(path, resource, version.version)) %>
+ </div>
+ <div class="metadata">
+
+ <p>
+ Created
+ <% if version.respond_to?(:contributor_id) %>
+ by <%= contributor version.contributor_id, version.contributor_type %>
+ <% end %>
+ on <%= datetime version.created_at %>
+ </p>
+
+ <% unless version.created_at == version.updated_at %>
+ <p>
+ Last edited
+ <% if version.respond_to?(:last_edited_by) %>
+ by <%= contributor version.last_edited_by, "User" %>
+ <% end %>
+ on <%= datetime version.updated_at %>
+ </p>
+ <% end %>
+
+ <% if !version.revision_comments.blank? %>
+ <p>
+ <div>Revision comment:</div>
+ <div class="comment">
+ <%= white_list version.revision_comments %>
+ </div>
+ </p>
+ <% end %>
+ </div>
+ </li>
+ <% end %>
+</ol>
+
Modified: trunk/app/views/networks/show.rhtml (3064 => 3065)
--- trunk/app/views/networks/show.rhtml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/views/networks/show.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -42,21 +42,20 @@
|
<%= link_to "Members (address@hidden)", "#group_members" %>
|
- <!-- NB! IDs of tabs for selectTab() might easily change! -->
- <a href=""
+ <a href=""
|
- <a href="" Items (<%= @shared_items.length -%>)</a>
+ <a href="" Items (<%= @shared_items.length -%>)</a>
|
- <a href="" (<%= @network.creditations.length -%>)</a>
+ <a href="" (<%= @network.creditations.length -%>)</a>
|
<% if mine? @network %>
- <a href="" Memberships</a>
+ <a href="" Memberships</a>
|
<% cnt = @network.memberships_requested.length %>
- <a href="" unless cnt == 0 %><b><% end %>Requests Pending (<%= cnt -%>)<% unless cnt == 0 %></b><% end %></a>
+ <a href="" unless cnt == 0 %><b><% end %>Requests Pending (<%= cnt -%>)<% unless cnt == 0 %></b><% end %></a>
|
<% cnt = @network.memberships_invited.length %>
- <a href="" unless cnt == 0 %><b><% end %>Invites Pending (<%= cnt -%>)<% unless cnt == 0 %></b><% end %></a>
+ <a href="" unless cnt == 0 %><b><% end %>Invites Pending (<%= cnt -%>)<% unless cnt == 0 %></b><% end %></a>
|
<br/>
|
@@ -134,7 +133,7 @@
<p>
<b>
This group has been credited
- <a href="" pluralize(@network.creditations.length, "time") -%></a>
+ <a href="" pluralize(@network.creditations.length, "time") -%></a>
<a name="group_creditations"></a>
</b>
</p>
@@ -155,18 +154,18 @@
<div id="tabsContainer" class="tabsContainer"></div>
-<a name="news"></a>
<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>
-<a name="shared_items"></a>
<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 %>
@@ -189,11 +188,11 @@
</div>
</div>
-<a name="creditations"></a>
<div class="tabContainer">
<div class="tabTitle">Creditations (<%= @network.creditations.length -%>)</div>
<div class="tabContent">
+ <a name="creditations"></a>
<% unless (creditations = @network.creditations).empty? %>
<%= view_privileges_notice %>
<% creditations.each do |c| %>
@@ -211,10 +210,10 @@
<% if logged_in? && @network.administrator?(current_user.id) %>
<% memberships = @network.memberships_accepted %>
- <a name="manage_memberships"></a>
<div class="tabContainer">
<div class="tabTitle">Manage Memberships</div>
<div class="tabContent">
+ <a name="manage_memberships"></a>
<% unless memberships.empty? %>
<%= render :partial => "memberships/table", :locals => { :collection => memberships, :network => false } %>
<% else %>
@@ -224,10 +223,10 @@
</div>
<% requests = @network.memberships_requested %>
- <a name="requests_pending"></a>
<div class="tabContainer">
<div class="tabTitle">Requests Pending (<%= @network.memberships_requested.length -%>)</div>
<div class="tabContent">
+ <a name="requests_pending"></a>
<% unless requests.empty? %>
<p></p>
<%= render :partial => "memberships/table", :locals => { :collection => requests, :network => false } %>
@@ -238,10 +237,10 @@
</div>
<% invited = @network.memberships_invited %>
- <a name="invites_pending"></a>
<div class="tabContainer">
<div class="tabTitle">Invites Pending (<%= @network.memberships_invited.length -%>)</div>
<div class="tabContent">
+ <a name="invites_pending"></a>
<% unless invited.empty? %>
<p></p>
<%= render :partial => "memberships/table", :locals => { :collection => invited, :network => false } %>
Modified: trunk/app/views/packs/show.rhtml (3064 => 3065)
--- trunk/app/views/packs/show.rhtml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/views/packs/show.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -22,8 +22,7 @@
|
<% end %>
<% if logged_in? and @pack.owner? current_user %>
- <!-- NB! Index of the 'sharing' tab might change! -->
- <a href=""
+ <a href=""
|
<% end %>
<%= link_to "Tags <span id='mini_nav_tag_link'>(address@hidden)</span>", "#tags" %>
@@ -169,11 +168,11 @@
<% if logged_in? and @pack.owner? current_user %>
- <a name="sharing"></a>
<div class="tabContainer">
<div class="tabTitle">Sharing</div>
<div class="tabContent">
+ <a name="sharing"></a>
<%= render :partial => "contributions/sharing_summary", :locals => { :contributable => @pack } %>
<%= render :partial => "contributions/updating_summary", :locals => { :contributable => @pack } %>
Deleted: trunk/app/views/workflows/_version_meta.rhtml (3064 => 3065)
--- trunk/app/views/workflows/_version_meta.rhtml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/views/workflows/_version_meta.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,34 +0,0 @@
-<p>
- <b>Created on:</b>
- <%= datetime version.created_at %>
-</p>
-
-<p>
- <b>Created by:</b>
- <%= contributor version.contributor_id, version.contributor_type %>
-</p>
-
-<% unless version.created_at == version.updated_at %>
-
- <p>
- <b>Last edited on:</b>
- <%= datetime version.updated_at %>
- </p>
-
- <p>
- <b>Last edited by:</b>
- <%= contributor version.last_edited_by, "User" %>
- </p>
-
-<% end %>
-
-<p>
- <b>Revision comments:</b>
-</p>
-<% unless version.revision_comments.blank? -%>
- <div>
- <%= white_list version.revision_comments %>
- </div>
-<% else %>
- <p><i>None</i></p>
-<% end %>
Deleted: trunk/app/views/workflows/_versions.rhtml (3064 => 3065)
--- trunk/app/views/workflows/_versions.rhtml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/views/workflows/_versions.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,39 +0,0 @@
-<p>
- <b>Earliest Version:</b><br/>
- <%= versioned_workflow_link(workflow, workflow.versions.first.version ) %>
- <div class="contribution_version_meta_info_box" style="margin-bottom: 0.6em;">
- <%= render :partial => "version_meta", :locals => { :version => workflow.versions.first } %>
- </div>
-</p>
-
-<% if @latest_version_number > 2 %>
-<p>
- <b>Previous Versions:</b><br/>
- <% (address@hidden).each do |v| %>
- <% if (link = versioned_workflow_link(workflow, v)) %>
- <%= link %><br/>
- <div class="contribution_version_meta_info_box" style="margin-bottom: 0.6em;">
- <%= render :partial => "version_meta", :locals => { :version => workflow.find_version(v) } %>
- </div>
- <% else %>
- <p>[<%= v.to_s %>] - <i>does not exist</i></p>
- <% end %>
- <% end %>
-</p>
-<% end %>
-
-<% if @latest_version_number > 1 %>
- <p>
- <b>Latest Version:</b><br/>
- <%= versioned_workflow_link(workflow, @latest_version_number) %>
- <div class="contribution_version_meta_info_box" style="margin-bottom: 0.6em;">
- <%= render :partial => "version_meta", :locals => { :version => workflow.versions.last } %>
- </div>
- </p>
-<% end %>
-
-<% if workflow.versions.length == 1 %>
- <p>
- This Workflow only has one version.
- </p>
-<% end %>
Modified: trunk/app/views/workflows/show.rhtml (3064 => 3065)
--- trunk/app/views/workflows/show.rhtml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/app/views/workflows/show.rhtml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,13 +1,5 @@
<% t "#{h @workflow.title} (#{h @workflow.contributor_name}) [#{h(@workflow.type_display_name)} Workflow]" -%>
-<script type="text/_javascript_">
- function showWorkflowVersion(form) {
- var url = ""
- location.href = ""
- form.submit
- }
-</script>
-
<ul class="sectionIcons">
<% if @authorised_to_edit -%>
<li><%= icon('new', new_version_workflow_path(@workflow), nil, nil, 'Upload New Version')%></li>
@@ -28,8 +20,6 @@
<%= render :partial => "contributions/datetime_info", :locals => { :contributable => @workflow } -%>
-<!-- the code for 'selectTab()' should be refactored at some point to get -->
-<!-- tab name as a string, not it's ID; for now IDs are used -->
<div class="contribution_mini_nav">
|
<%= link_to "License", "#license" %>
@@ -50,12 +40,12 @@
|
<br/>
|
- <a href="" (<%= @workflow.citations.length -%>)</a>
+ <a href="" (<%= @workflow.citations.length -%>)</a>
|
- <a href="" History</a>
- |
+ <a href="" History</a>
+ |
<% if logged_in? and @workflow.owner?(current_user) %>
- <a href=""
+ <a href=""
|
<% end %>
<%= link_to "Reviews (address@hidden)", "#reviews" %>
@@ -68,63 +58,9 @@
<div class="contribution_left_box">
<div class="contribution_version_box">
- <div class="contribution_version_selector_box">
- <table>
- <tbody>
- <tr>
- <td class="heading" style="vertical-align: top;">
- <%= info_icon_with_tooltip("This box shows version address@hidden of the Workflow file for this Workflow entry") -%>
- <span><%= "Version address@hidden address@hidden(@viewing_version_number)}" -%></span>
- <span class="count_text">(of <%= @workflow.versions.length -%>)</span>
- <a name="versions"></a>
- </td>
- <td>
- <% if @latest_version_number > 1 %>
- <form return false;" style="text-align: right;">
- <b>View version: </b>
- <select id="workflow_versions"
- <% @workflow.versions.reverse.each do |w| %>
- <option value="<%= versioned_workflow_url(@workflow, w.version.to_s) %>" <%= "selected" if w.version == @viewing_version_number -%>>
- <%= "#{w.version.to_s} address@hidden(w.version)}" %>
- </option>
- <% end %>
- </select>
- </form>
- <% end %>
- </td>
- </tr>
- </tbody>
- </table>
-
- <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 @viewing_version.created_at, false %></span>
- <b>by:</b>
- <span><%= contributor @viewing_version.contributor_id, @viewing_version.contributor_type %></span>
- <span> | </span>
- <span><%= link_to_function "Revision comments " + expand_image, visual_effect(:toggle_blind, "version_info_box_comments", :duration => 0.3) %></span>
- </p>
-
- <% unless @viewing_version.created_at == @viewing_version.updated_at %>
- <p style="text-align: center;">
- <b>Last edited on:</b>
- <span><%= datetime @viewing_version.updated_at, false %></span>
- <b>by:</b>
- <span><%= contributor @viewing_version.last_edited_by, "User" %></span>
- </p>
- <% end %>
- </div>
-
- <div id="version_info_box_comments" style="display: none; border: 1px dotted #CCCCCC; padding: 0.3em 0.5em;">
- <% unless @viewing_version.revision_comments.blank? -%>
- <%= white_list @viewing_version.revision_comments %>
- <% else %>
- <p><i>None</i></p>
- <% end %>
- </div>
- </div>
-
+
+ <%= render(:partial => "contributions/version_selector", :locals => { :resource => @workflow, :version => @viewing_version, :path => :workflow_version_path }) %>
+
<% if @authorised_to_edit %>
<div style="margin-top: 1em;">
<ul class="sectionIcons" style="margin-top: 0.7em; margin-bottom: 0.6em;">
@@ -337,24 +273,23 @@
<div id="tabsContainer" class="tabsContainer"></div>
-<a name="citations"></a>
<%= render :partial => "contributions/citations_tab", :locals => { :item => @workflow } %>
-<a name="version_history"></a>
<div class="tabContainer">
<div class="tabTitle">Version History</div>
<div class="tabContent">
- <%= render :partial => "workflows/versions", :locals => { :workflow => @workflow } %>
+ <a name="version_history"></a>
+ <%= render :partial => "contributions/versions", :locals => { :resource => @workflow, :path => :workflow_version_path } %>
</div>
</div>
<% if logged_in? and @workflow.owner?(current_user) %>
- <a name="sharing"></a>
<div class="tabContainer">
<div class="tabTitle">Sharing</div>
<div class="tabContent">
+ <a name="sharing"></a>
<%= render :partial => "contributions/sharing_summary", :locals => { :contributable => @workflow } %>
<%= render :partial => "contributions/updating_summary", :locals => { :contributable => @workflow } %>
Modified: trunk/config/environment.rb (3064 => 3065)
--- trunk/config/environment.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/config/environment.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -54,7 +54,8 @@
:recaptcha,
:simile_timeline,
:structured_data,
- :validates_email_veracity_of
+ :validates_email_veracity_of,
+ :versioning
]
# Skip frameworks you're not going to use. To use Rails without a database,
Modified: trunk/config/routes.rb (3064 => 3065)
--- trunk/config/routes.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/config/routes.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -132,6 +132,13 @@
map.workflow_version '/workflows/:id/versions/:version', :conditions => { :method => :get }, :controller => 'workflows', :action ="" 'show'
map.formatted_workflow_version '/workflows/:id/versions/:version.:format', :conditions => { :method => :get }, :controller => 'workflows', :action ="" 'show'
+ # blob redirect for linked data model
+ 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'
+
+ 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'
+
# versioned preview images
['workflow'].each do |x|
@@ -163,6 +170,8 @@
:favourite => :post,
:favourite_delete => :delete,
:rate => :post,
+ :suggestions => :get,
+ :process_suggestions => :post,
:tag => :post } do |blob|
# Due to restrictions in the version of Rails used (v1.2.3),
# we cannot have reviews as nested resources in more than one top level resource.
@@ -273,6 +282,7 @@
map.connect ':controller/:id/download/:name', :action ="" 'named_download', :requirements => { :name => /.*/ }
map.connect 'files/:id/download/:name', :controller => 'blobs', :action ="" 'named_download', :requirements => { :name => /.*/ }
+ map.connect 'files/:id/versions/:version/download/:name', :controller => 'blobs', :action ="" 'named_download_with_version', :requirements => { :name => /.*/ }
# map.connect 'topics', :controller => 'topics', :action ="" 'index'
map.connect 'topics/tag_feedback', :controller => 'topics', :action ="" 'tag_feedback'
Deleted: trunk/config/schema.d/files.xml (3064 => 3065)
--- trunk/config/schema.d/files.xml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/config/schema.d/files.xml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<schema>
-
- <table name="blobs">
-
- <column type="integer" name="contributor_id"/>
- <column type="string" name="contributor_type"/>
- <column type="string" name="local_name"/>
- <column type="datetime" name="created_at"/>
- <column type="datetime" name="updated_at"/>
- <column type="string" name="title"/>
- <column type="text" name="body"/>
- <column type="text" name="body_html"/>
- <column type="integer" name="content_blob_id"/>
- <column type="integer" name="content_type_id"/>
- <column type="integer" name="license_id"/>
-
- </table>
-
-</schema>
-
Modified: trunk/config/schema.d/workflows.xml (3064 => 3065)
--- trunk/config/schema.d/workflows.xml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/config/schema.d/workflows.xml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,28 +1,6 @@
<?xml version="1.0"?>
<schema>
- <table name="workflows">
-
- <column type="integer" name="contributor_id"/>
- <column type="string" name="contributor_type"/>
- <column type="string" name="title"/>
- <column type="string" name="unique_name"/>
- <column type="text" name="body"/>
- <column type="text" name="body_html"/>
- <column type="datetime" name="created_at"/>
- <column type="datetime" name="updated_at"/>
- <column type="string" name="image"/>
- <column type="string" name="svg"/>
- <column type="integer" name="current_version"/>
- <column type="integer" name="content_blob_id"/>
- <column type="string" name="file_ext"/>
- <column type="string" name="last_edited_by"/>
- <column type="integer" name="content_type_id"/>
- <column type="integer" name="license_id"/>
- <column type="integer" name="preview_id"/>
-
- </table>
-
<table name="workflow_processors">
<column type="integer" name="workflow_id"/>
Modified: trunk/config/tables.xml
(Binary files differ)
Modified: trunk/db/migrate/012_create_blobs.rb (3064 => 3065)
--- trunk/db/migrate/012_create_blobs.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/012_create_blobs.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -5,18 +5,18 @@
class CreateBlobs < ActiveRecord::Migration
def self.up
-# create_table :blobs do |t|
-# t.column :contributor_id, :integer
-# t.column :contributor_type, :string
-# t.column :local_name, :string
-# t.column :content_type, :string
-# t.column :data, :binary
-# t.column :created_at, :datetime
-# t.column :updated_at, :datetime
-# end
+ create_table :blobs do |t|
+ t.column :contributor_id, :integer
+ t.column :contributor_type, :string
+ t.column :local_name, :string
+ t.column :content_type, :string
+ t.column :data, :binary
+ t.column :created_at, :datetime
+ t.column :updated_at, :datetime
+ end
end
def self.down
-# drop_table :blobs
+ drop_table :blobs
end
end
Modified: trunk/db/migrate/013_create_workflows.rb (3064 => 3065)
--- trunk/db/migrate/013_create_workflows.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/013_create_workflows.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -5,27 +5,30 @@
class CreateWorkflows < ActiveRecord::Migration
def self.up
-# create_table :workflows do |t|
-# t.column :contributor_id, :integer
-# t.column :contributor_type, :string
-#
-# t.column :scufl, :binary
-# t.column :image, :string
-# t.column :svg, :string
-#
-# t.column :title, :string
-# t.column :unique_name, :string
-#
-# t.column :body, :text
-# t.column :body_html, :text
-#
-# t.column :created_at, :datetime
-# t.column :updated_at, :datetime
-#
-# t.column :license, :string,
-# :limit => 10, :null => false,
-# :default => "by-sa"
-# end
+ create_table :workflows do |t|
+ t.column :contributor_id, :integer
+ t.column :contributor_type, :string
+
+ t.column :scufl, :binary
+ t.column :image, :string
+ t.column :svg, :string
+
+ t.column :title, :string
+ t.column :unique_name, :string
+
+ t.column :body, :text
+ t.column :body_html, :text
+
+ t.column :version, :integer
+ t.column :preview_id, :integer
+
+ t.column :created_at, :datetime
+ t.column :updated_at, :datetime
+
+ t.column :license, :string,
+ :limit => 10, :null => false,
+ :default => "by-sa"
+ end
create_table :workflow_versions do |t|
t.column "workflow_id", :integer
@@ -34,17 +37,11 @@
t.column "contributor_type", :string
t.column "title", :string
t.column "unique_name", :string
+ t.column "scufl", :text
t.column "body", :text
t.column "body_html", :text
t.column "created_at", :datetime
t.column "updated_at", :datetime
- t.column "image", :string
- t.column "svg", :string
- t.column "revision_comments", :text
- t.column "content_blob_id", :integer
- t.column "file_ext", :string
- t.column "last_edited_by", :string
- t.column "content_type_id", :integer
t.column "license", :string
t.column "preview_id", :integer
end
@@ -53,7 +50,7 @@
end
def self.down
-# drop_table :workflows
+ drop_table :workflows
drop_table :workflow_versions
end
end
Modified: trunk/db/migrate/029_modify_blobs.rb (3064 => 3065)
--- trunk/db/migrate/029_modify_blobs.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/029_modify_blobs.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,12 +1,12 @@
class ModifyBlobs < ActiveRecord::Migration
def self.up
-# add_column :blobs, :title, :string
-# add_column :blobs, :description, :text
+ add_column :blobs, :title, :string
+ add_column :blobs, :description, :text
end
def self.down
-# remove_column :blobs, :title
-# remove_column :blobs, :description
+ remove_column :blobs, :title
+ remove_column :blobs, :description
end
end
Modified: trunk/db/migrate/030_add_license_to_blobs.rb (3064 => 3065)
--- trunk/db/migrate/030_add_license_to_blobs.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/030_add_license_to_blobs.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,10 +1,10 @@
class AddLicenseToBlobs < ActiveRecord::Migration
def self.up
-# add_column :blobs, :license, :string, :limit => 10, :null => false, :default => "by-nd"
+ add_column :blobs, :license, :string, :limit => 10, :null => false, :default => "by-nd"
end
def self.down
-# remove_column :blobs, :license
+ remove_column :blobs, :license
end
end
Modified: trunk/db/migrate/031_rename_desc_to_body.rb (3064 => 3065)
--- trunk/db/migrate/031_rename_desc_to_body.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/031_rename_desc_to_body.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,12 +1,12 @@
class RenameDescToBody < ActiveRecord::Migration
def self.up
-# rename_column :blobs, :description, :body
-# add_column :blobs, :body_html, :text
+ rename_column :blobs, :description, :body
+ add_column :blobs, :body_html, :text
end
def self.down
-# rename_column :blobs, :body, :description
-# remove_column :blobs, :body_html
+ rename_column :blobs, :body, :description
+ remove_column :blobs, :body_html
end
end
Modified: trunk/db/migrate/033_increase_blob_size.rb (3064 => 3065)
--- trunk/db/migrate/033_increase_blob_size.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/033_increase_blob_size.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,16 +1,16 @@
class IncreaseBlobSize < ActiveRecord::Migration
def self.up
-# rename_column :blobs, :data, :temp
-# add_column :blobs, :data, :binary, :limit => 1073741824
-# execute 'UPDATE blobs SET data = ""
-# remove_column :blobs, :temp
+ rename_column :blobs, :data, :temp
+ add_column :blobs, :data, :binary, :limit => 1073741824
+ execute 'UPDATE blobs SET data = ""
+ remove_column :blobs, :temp
end
def self.down
-# rename_column :blobs, :data, :temp
-# add_column :blobs, :data, :binary
-# execute 'UPDATE blobs SET data = ""
-# remove_column :blobs, :temp
+ rename_column :blobs, :data, :temp
+ add_column :blobs, :data, :binary
+ execute 'UPDATE blobs SET data = ""
+ remove_column :blobs, :temp
end
end
Modified: trunk/db/migrate/034_update_for_new_versioning.rb (3064 => 3065)
--- trunk/db/migrate/034_update_for_new_versioning.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/034_update_for_new_versioning.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,17 +1,17 @@
class UpdateForNewVersioning < ActiveRecord::Migration
def self.up
-# rename_column :workflows, :version, :current_version
+ rename_column :workflows, :version, :current_version
-# add_column :workflow_versions, :image, :string
-# add_column :workflow_versions, :svg, :string
-# add_column :workflow_versions, :revision_comments, :text
+ add_column :workflow_versions, :image, :string
+ add_column :workflow_versions, :svg, :string
+ add_column :workflow_versions, :revision_comments, :text
end
def self.down
-# rename_column :workflows, :current_version, :version
+ rename_column :workflows, :current_version, :version
-# remove_column :workflow_versions, :image
-# remove_column :workflow_versions, :svg
-# remove_column :workflow_versions, :revision_comments
+ remove_column :workflow_versions, :image
+ remove_column :workflow_versions, :svg
+ remove_column :workflow_versions, :revision_comments
end
end
Modified: trunk/db/migrate/035_increase_workflow_size.rb (3064 => 3065)
--- trunk/db/migrate/035_increase_workflow_size.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/035_increase_workflow_size.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,22 +1,22 @@
class IncreaseWorkflowSize < ActiveRecord::Migration
def self.up
-# rename_column :workflows, :scufl, :temp
-# add_column :workflows, :scufl, :binary, :limit => 1073741824
-# execute 'UPDATE workflows SET scufl = temp'
-# remove_column :workflows, :temp
+ rename_column :workflows, :scufl, :temp
+ add_column :workflows, :scufl, :binary, :limit => 1073741824
+ execute 'UPDATE workflows SET scufl = temp'
+ remove_column :workflows, :temp
-# execute 'ALTER TABLE workflow_versions CHANGE COLUMN scufl scufl LONGBLOB'
+ execute 'ALTER TABLE workflow_versions CHANGE COLUMN scufl scufl LONGBLOB'
end
def self.down
-# rename_column :workflows, :scufl, :temp
-# add_column :workflows, :scufl, :binary
-# execute 'UPDATE workflows SET scufl = temp'
-# remove_column :workflows, :temp
+ rename_column :workflows, :scufl, :temp
+ add_column :workflows, :scufl, :binary
+ execute 'UPDATE workflows SET scufl = temp'
+ remove_column :workflows, :temp
-# execute 'ALTER TABLE workflow_versions CHANGE COLUMN scufl scufl BLOB'
+ execute 'ALTER TABLE workflow_versions CHANGE COLUMN scufl scufl BLOB'
end
end
Modified: trunk/db/migrate/046_add_type_to_workflows.rb (3064 => 3065)
--- trunk/db/migrate/046_add_type_to_workflows.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/046_add_type_to_workflows.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -2,16 +2,16 @@
class AddTypeToWorkflows < ActiveRecord::Migration
def self.up
-# add_column :workflows, :content_type, :string
-# add_column :workflow_versions, :content_type, :string
+ add_column :workflows, :content_type, :string
+ add_column :workflow_versions, :content_type, :string
-# # Currently, all workflows are scufl workflows
-# execute 'UPDATE workflows SET content_type = "application/vnd.taverna.scufl+xml"'
-# execute 'UPDATE workflow_versions SET content_type = "application/vnd.taverna.scufl+xml"'
+ # Currently, all workflows are scufl workflows
+ execute 'UPDATE workflows SET content_type = "application/vnd.taverna.scufl+xml"'
+ execute 'UPDATE workflow_versions SET content_type = "application/vnd.taverna.scufl+xml"'
end
def self.down
-# remove_column :workflows, :content_type
-# remove_column :workflow_versions, :content_type
+ remove_column :workflows, :content_type
+ remove_column :workflow_versions, :content_type
end
end
Modified: trunk/db/migrate/053_modify_blobs_for_content_blobs.rb (3064 => 3065)
--- trunk/db/migrate/053_modify_blobs_for_content_blobs.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/053_modify_blobs_for_content_blobs.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,9 +1,9 @@
class ModifyBlobsForContentBlobs < ActiveRecord::Migration
def self.up
-# add_column :blobs, :content_blob_id, :integer
+ add_column :blobs, :content_blob_id, :integer
end
def self.down
-# remove_column :blobs, :content_blob_id
+ remove_column :blobs, :content_blob_id
end
end
Modified: trunk/db/migrate/054_move_blob_data_to_content_blobs.rb (3064 => 3065)
--- trunk/db/migrate/054_move_blob_data_to_content_blobs.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/054_move_blob_data_to_content_blobs.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,17 +1,17 @@
class MoveBlobDataToContentBlobs < ActiveRecord::Migration
def self.up
-# Blob.find(:all).each do |b|
-# b.content_blob = ContentBlob.new(:data ="" b.data)
-# b.save
-# end
+ Blob.find(:all).each do |b|
+ b.content_blob = ContentBlob.new(:data ="" b.data)
+ b.save
+ end
-# remove_column :blobs, :data
+ remove_column :blobs, :data
end
def self.down
-# add_column :blobs, :data, :binary, :limit => 1073741824
+ add_column :blobs, :data, :binary, :limit => 1073741824
-# execute 'UPDATE blobs,content_blobs SET blobs.data = "" WHERE blobs.content_blob_id = content_blobs.id'
+ execute 'UPDATE blobs,content_blobs SET blobs.data = "" WHERE blobs.content_blob_id = content_blobs.id'
end
end
Modified: trunk/db/migrate/055_modify_workflows_and_workflow_versions_for_content_blobs.rb (3064 => 3065)
--- trunk/db/migrate/055_modify_workflows_and_workflow_versions_for_content_blobs.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/055_modify_workflows_and_workflow_versions_for_content_blobs.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,11 +1,11 @@
class ModifyWorkflowsAndWorkflowVersionsForContentBlobs < ActiveRecord::Migration
def self.up
-# add_column :workflows, :content_blob_id, :integer
-# add_column :workflow_versions, :content_blob_id, :integer
+ add_column :workflows, :content_blob_id, :integer
+ add_column :workflow_versions, :content_blob_id, :integer
end
def self.down
-# remove_column :workflows, :content_blob_id
-# remove_column :workflow_versions, :content_blob_id
+ remove_column :workflows, :content_blob_id
+ remove_column :workflow_versions, :content_blob_id
end
end
Modified: trunk/db/migrate/056_move_scufl_data_to_content_blobs.rb (3064 => 3065)
--- trunk/db/migrate/056_move_scufl_data_to_content_blobs.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/056_move_scufl_data_to_content_blobs.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,41 +1,41 @@
class MoveScuflDataToContentBlobs < ActiveRecord::Migration
def self.up
-# ActiveRecord::Base.record_timestamps = false
+ ActiveRecord::Base.record_timestamps = false
-# Workflow.find(:all).each do |w|
+ Workflow.find(:all).each do |w|
-# w.versions.each do |wv|
-# wv.content_blob = ContentBlob.new(:data ="" wv.scufl)
-# wv.save
-# end
+ w.versions.each do |wv|
+ wv.content_blob = ContentBlob.new(:data ="" wv.scufl)
+ wv.save
+ end
-# current = w.find_version(w.current_version)
-# w.content_blob = current.content_blob
+ current = w.find_version(w.current_version)
+ w.content_blob = current.content_blob
-# w.save
-# end
+ w.save
+ end
-# remove_column :workflows, :scufl
-# remove_column :workflow_versions, :scufl
+ remove_column :workflows, :scufl
+ remove_column :workflow_versions, :scufl
-# ActiveRecord::Base.record_timestamps = true
+ ActiveRecord::Base.record_timestamps = true
end
def self.down
-# ActiveRecord::Base.record_timestamps = false
+ ActiveRecord::Base.record_timestamps = false
-# add_column :workflows, :scufl, :binary, :limit => 1073741824
-# add_column :workflow_versions, :scufl, :binary, :limit => 1073741824
+ add_column :workflows, :scufl, :binary, :limit => 1073741824
+ add_column :workflow_versions, :scufl, :binary, :limit => 1073741824
-# execute 'UPDATE workflows,content_blobs SET workflows.scufl = content_blobs.data WHERE workflows.content_blob_id = content_blobs.id'
-# execute 'UPDATE workflow_versions,content_blobs SET workflow_versions.scufl = content_blobs.data WHERE workflow_versions.content_blob_id = content_blobs.id'
+ execute 'UPDATE workflows,content_blobs SET workflows.scufl = content_blobs.data WHERE workflows.content_blob_id = content_blobs.id'
+ execute 'UPDATE workflow_versions,content_blobs SET workflow_versions.scufl = content_blobs.data WHERE workflow_versions.content_blob_id = content_blobs.id'
-# Workflow.find(:all).each do |w|
-# w.versions.each do |wv|
-# wv.content_blob.destroy
-# end
-# end
+ Workflow.find(:all).each do |w|
+ w.versions.each do |wv|
+ wv.content_blob.destroy
+ end
+ end
-# ActiveRecord::Base.record_timestamps = true
+ ActiveRecord::Base.record_timestamps = true
end
end
Modified: trunk/db/migrate/066_add_file_ext_to_workflow.rb (3064 => 3065)
--- trunk/db/migrate/066_add_file_ext_to_workflow.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/066_add_file_ext_to_workflow.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,15 +1,15 @@
class AddFileExtToWorkflow < ActiveRecord::Migration
def self.up
-# add_column :workflows, :file_ext, :string
-# add_column :workflow_versions, :file_ext, :string
+ add_column :workflows, :file_ext, :string
+ add_column :workflow_versions, :file_ext, :string
# Currently, we assume that all workflows are scufl workflows!
-# execute 'UPDATE workflows SET file_ext = "xml"'
-# execute 'UPDATE workflow_versions SET file_ext = "xml"'
+ execute 'UPDATE workflows SET file_ext = "xml"'
+ execute 'UPDATE workflow_versions SET file_ext = "xml"'
end
def self.down
-# remove_column :workflows, :file_ext
-# remove_column :workflow_versions, :file_ext
+ remove_column :workflows, :file_ext
+ remove_column :workflow_versions, :file_ext
end
end
Modified: trunk/db/migrate/067_add_last_edited_by_to_workflows.rb (3064 => 3065)
--- trunk/db/migrate/067_add_last_edited_by_to_workflows.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/067_add_last_edited_by_to_workflows.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,14 +1,14 @@
class AddLastEditedByToWorkflows < ActiveRecord::Migration
def self.up
-# add_column :workflows, :last_edited_by, :string
-# add_column :workflow_versions, :last_edited_by, :string
+ add_column :workflows, :last_edited_by, :string
+ add_column :workflow_versions, :last_edited_by, :string
-# execute 'UPDATE workflows SET last_edited_by=contributor_id'
-# execute 'UPDATE workflow_versions SET last_edited_by=contributor_id'
+ execute 'UPDATE workflows SET last_edited_by=contributor_id'
+ execute 'UPDATE workflow_versions SET last_edited_by=contributor_id'
end
def self.down
-# remove_column :workflows, :last_edited_by
-# remove_column :workflow_versions, :last_edited_by
+ remove_column :workflows, :last_edited_by
+ remove_column :workflow_versions, :last_edited_by
end
end
Modified: trunk/db/migrate/076_create_content_types.rb (3064 => 3065)
--- trunk/db/migrate/076_create_content_types.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/076_create_content_types.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -15,9 +15,9 @@
# t.column :updated_at, :datetime
# end
-# add_column :workflows, :content_type_id, :integer
-# add_column :workflow_versions, :content_type_id, :integer
-# add_column :blobs, :content_type_id, :integer
+ add_column :workflows, :content_type_id, :integer
+ add_column :workflow_versions, :content_type_id, :integer
+ add_column :blobs, :content_type_id, :integer
# Create ContentType records for workflows with processors
@@ -94,20 +94,20 @@
# execute("UPDATE blobs SET content_type_id = #{blob_type_to_content_type_id[b.attributes["content_type"].strip]} WHERE id = #{b.id}")
# end
-# remove_column :workflows, :content_type
-# remove_column :workflow_versions, :content_type
-# remove_column :blobs, :content_type
+ remove_column :workflows, :content_type
+ remove_column :workflow_versions, :content_type
+ remove_column :blobs, :content_type
end
def self.down
-# add_column :workflows, :content_type, :string
-# add_column :workflow_versions, :content_type, :string
-# add_column :blobs, :content_type, :string
+ add_column :workflows, :content_type, :string
+ add_column :workflow_versions, :content_type, :string
+ add_column :blobs, :content_type, :string
-# remove_column :workflows, :content_type_id
-# remove_column :workflow_versions, :content_type_id
-# remove_column :blobs, :content_type_id
+ remove_column :workflows, :content_type_id
+ remove_column :workflow_versions, :content_type_id
+ remove_column :blobs, :content_type_id
# drop_table :content_types
end
Modified: trunk/db/migrate/080_add_license_id_to_workflows_and_blobs.rb (3064 => 3065)
--- trunk/db/migrate/080_add_license_id_to_workflows_and_blobs.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/080_add_license_id_to_workflows_and_blobs.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,37 +1,37 @@
class AddLicenseIdToWorkflowsAndBlobs < ActiveRecord::Migration
def self.up
#Need to rename columns so that license method and license field do not get confused
-# rename_column :workflows, :license, :license_name
-# rename_column :blobs, :license, :license_name
-#
-# add_column :workflows, :license_id, :integer, :default => nil
-# add_column :blobs, :license_id, :integer, :default => nil
+ rename_column :workflows, :license, :license_name
+ rename_column :blobs, :license, :license_name
+
+ add_column :workflows, :license_id, :integer, :default => nil
+ add_column :blobs, :license_id, :integer, :default => nil
-# Workflow.find(:all).each do |w|
-# execute("UPDATE workflows SET license_id = #{License.find(:first,:conditions=>[ 'unique_name = ?', w.license_name ]).id } WHERE id = #{w.id}")
-# end
-# Blob.find(:all).each do |b|
-# execute("UPDATE blobs SET license_id = #{License.find(:first,:conditions=>[ 'unique_name = ?', b.license_name ]).id } WHERE id = #{b.id}")
-# end
-# remove_column :workflows, :license_name
-# remove_column :blobs, :license_name
+ Workflow.find(:all).each do |w|
+ execute("UPDATE workflows SET license_id = #{License.find(:first,:conditions=>[ 'unique_name = ?', w.license_name ]).id } WHERE id = #{w.id}")
+ end
+ Blob.find(:all).each do |b|
+ execute("UPDATE blobs SET license_id = #{License.find(:first,:conditions=>[ 'unique_name = ?', b.license_name ]).id } WHERE id = #{b.id}")
+ end
+ remove_column :workflows, :license_name
+ remove_column :blobs, :license_name
end
def self.down
-# add_column :workflows, :license, :string,
-# :limit => 10, :null => false,
-# :default => "by-sa"
-#
-# add_column :blobs, :license, :string,
-# :limit => 10, :null => false,
-# :default => "by-sa"
-# Workflow.find(:all).each do |w|
-# execute("UPDATE workflows SET license = '#{License.find(w.license_id).unique_name }' WHERE id = #{w.id}")
-# end
-# Blob.find(:all).each do |b|
-# execute("UPDATE blobs SET license = '#{License.find(b.license_id).unique_name }' WHERE id = #{b.id}")
-# end
-# remove_column :workflows, :license_id
-# remove_column :blobs, :license_id
+ add_column :workflows, :license, :string,
+ :limit => 10, :null => false,
+ :default => "by-sa"
+
+ add_column :blobs, :license, :string,
+ :limit => 10, :null => false,
+ :default => "by-sa"
+ Workflow.find(:all).each do |w|
+ execute("UPDATE workflows SET license = '#{License.find(w.license_id).unique_name }' WHERE id = #{w.id}")
+ end
+ Blob.find(:all).each do |b|
+ execute("UPDATE blobs SET license = '#{License.find(b.license_id).unique_name }' WHERE id = #{b.id}")
+ end
+ remove_column :workflows, :license_id
+ remove_column :blobs, :license_id
end
end
Modified: trunk/db/migrate/090_adjust_pictures.rb (3064 => 3065)
--- trunk/db/migrate/090_adjust_pictures.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/migrate/090_adjust_pictures.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -20,7 +20,7 @@
workflow_svg[workflow.id] = workflow.svg_fc
end
- Workflow::Version.find(:all, :select => 'id, image AS image_fc, svg AS svg_fc').each do |workflow_version|
+ WorkflowVersion.find(:all, :select => 'id, image AS image_fc, svg AS svg_fc').each do |workflow_version|
workflow_version_image[workflow_version.id] = workflow_version.image_fc
workflow_version_svg[workflow_version.id] = workflow_version.svg_fc
end
@@ -44,7 +44,7 @@
end
end
- Workflow::Version.find(:all).each do |workflow_version|
+ WorkflowVersion.find(:all).each do |workflow_version|
if workflow_version_image[workflow_version.id] || workflow_version_svg[workflow_version.id]
Copied: trunk/db/migrate/096_create_blob_versions.rb (from rev 3064, branches/versions/db/migrate/096_create_blob_versions.rb) (0 => 3065)
--- trunk/db/migrate/096_create_blob_versions.rb (rev 0)
+++ trunk/db/migrate/096_create_blob_versions.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -0,0 +1,36 @@
+# myExperiment: db/migrate/096_create_blob_versions.rb
+#
+# Copyright (c) 2012 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+class CreateBlobVersions < ActiveRecord::Migration
+
+ def self.up
+ create_table :blob_versions do |t|
+ t.integer "blob_id"
+ t.integer "version"
+ t.text "revision_comments"
+ t.string "title"
+ t.text "body"
+ t.text "body_html"
+ t.integer "content_type_id"
+ t.integer "content_blob_id"
+ t.string "local_name"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_column :blobs, :current_version, :integer
+
+ execute "UPDATE blobs SET current_version = 1"
+
+ execute "INSERT INTO blob_versions (blob_id, version, title, body, body_html, content_type_id, content_blob_id, local_name, created_at, updated_at) SELECT id, 1, title, body, body_html, content_type_id, content_blob_id, local_name, created_at, updated_at FROM blobs"
+ end
+
+ def self.down
+ remove_column :blobs, :current_version
+
+ drop_table :blob_versions
+ end
+end
+
Modified: trunk/db/schema.rb (3064 => 3065)
--- trunk/db/schema.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/db/schema.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -9,7 +9,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 94) do
+ActiveRecord::Schema.define(:version => 96) do
create_table "activity_limits", :force => true do |t|
t.string "contributor_type", :null => false
@@ -45,6 +45,20 @@
t.text "schema"
end
+ create_table "blob_versions", :force => true do |t|
+ t.integer "blob_id"
+ t.integer "version"
+ t.text "revision_comments"
+ t.string "title"
+ t.text "body"
+ t.text "body_html"
+ t.integer "content_type_id"
+ t.integer "content_blob_id"
+ t.string "local_name"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
create_table "blobs", :force => true do |t|
t.integer "contributor_id"
t.string "contributor_type"
@@ -57,6 +71,7 @@
t.integer "content_blob_id"
t.integer "content_type_id"
t.integer "license_id"
+ t.integer "current_version"
end
create_table "blog_posts", :force => true do |t|
@@ -740,6 +755,7 @@
t.string "reset_password_code"
t.datetime "reset_password_code_until"
t.string "account_status"
+ t.integer "spam_score"
end
create_table "viewings", :force => true do |t|
@@ -792,6 +808,8 @@
t.integer "preview_id"
end
+ add_index "workflow_versions", ["workflow_id"], :name => "index_workflow_versions_on_workflow_id"
+
create_table "workflows", :force => true do |t|
t.integer "contributor_id"
t.string "contributor_type"
Modified: trunk/lib/authorization.rb (3064 => 3065)
--- trunk/lib/authorization.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/lib/authorization.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -602,11 +602,11 @@
def Authorization.categorize_action(action_name)
case action_name
- when 'show', 'index', 'view', 'search', 'favourite', 'favourite_delete', 'comment', 'comment_delete', 'comments', 'comments_timeline', 'rate', 'tag', 'items', 'statistics', 'curation', 'tag_suggestions', 'extra_metadata', 'read', 'verify'
+ when 'show', 'index', 'view', 'search', 'favourite', 'favourite_delete', 'comment', 'comment_delete', 'comments', 'comments_timeline', 'rate', 'tag', 'items', 'statistics', 'curation', 'suggestions', 'tag_suggestions', 'extra_metadata', 'read', 'verify'
action = ''
- when 'edit', 'new', 'create', 'update', 'new_version', 'create_version', 'destroy_version', 'edit_version', 'update_version', 'new_item', 'create_item', 'edit_item', 'update_item', 'quick_add', 'resolve_link', 'process_tag_suggestions', 'process_extra_metadata', 'edit_relationships'
+ when 'edit', 'new', 'create', 'update', 'new_version', 'create_version', 'destroy_version', 'edit_version', 'update_version', 'new_item', 'create_item', 'edit_item', 'update_item', 'quick_add', 'resolve_link', 'process_suggestions', 'process_tag_suggestions', 'process_extra_metadata', 'edit_relationships'
action = ''
- when 'download', 'named_download', 'launch', 'submit_job', 'save_inputs', 'refresh_status', 'rerun', 'refresh_outputs', 'render_output', 'outputs_xml', 'outputs_package', 'galaxy_tool', 'galaxy_tool_download'
+ when 'download', 'named_download', 'named_download_with_version', 'launch', 'submit_job', 'save_inputs', 'refresh_status', 'rerun', 'refresh_outputs', 'render_output', 'outputs_xml', 'outputs_package', 'galaxy_tool', 'galaxy_tool_download'
action = ''
when 'destroy', 'delete', 'destroy_item'
action = ''
Deleted: trunk/lib/explicit_versioning.rb (3064 => 3065)
--- trunk/lib/explicit_versioning.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/lib/explicit_versioning.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1,380 +0,0 @@
-module Jits
- module Acts
- # Based heavily on the acts_as_versioned plugin
- module ExplicitVersioning
- CALLBACKS = [:sync_latest_version]
- def self.included(mod) # :nodoc:
- mod.extend(ClassMethods)
- end
-
- module ClassMethods
- def explicit_versioning(options = {}, &extension)
- # don't allow multiple calls
- return if self.included_modules.include?(Jits::Acts::ExplicitVersioning::ActMethods)
-
- send :include, Jits::Acts::ExplicitVersioning::ActMethods
-
- cattr_accessor :versioned_class_name, :versioned_foreign_key, :versioned_table_name, :versioned_inheritance_column,
- :version_column, :version_sequence_name, :non_versioned_columns, :file_columns, :extra_attributes, :white_list_columns, :revision_comments_column,
- :version_association_options, :timestamp_columns, :sync_ignore_columns
-
- self.versioned_class_name = options[:class_name] || "Version"
- self.versioned_foreign_key = options[:foreign_key] || self.to_s.foreign_key
- self.versioned_table_name = options[:table_name] || "#{table_name_prefix}#{base_class.name.demodulize.underscore}_versions#{table_name_suffix}"
- self.versioned_inheritance_column = options[:inheritance_column] || "versioned_#{inheritance_column}"
- self.version_column = options[:version_column] || 'version'
- self.non_versioned_columns = [self.primary_key, inheritance_column, 'version', 'lock_version', versioned_inheritance_column, version_column]
- self.file_columns = options[:file_columns] || []
- self.extra_attributes = options[:extra_attributes] || []
- self.white_list_columns = options[:white_list_columns] || []
- self.revision_comments_column = options[:revision_comments_column] || "revision_comments"
- self.version_association_options = {
- :class_name => "#{self.to_s}::#{versioned_class_name}",
- :foreign_key => "#{versioned_foreign_key}",
- :order => 'version',
- :dependent => :destroy
- }.merge(options[:association_options] || {})
- self.timestamp_columns = options[:timestamp_columns] || [ "created_at", "updated_at" ]
- self.sync_ignore_columns = options[:sync_ignore_columns] || []
-
- class_eval do
- has_many :versions, version_association_options
-
- before_create :set_new_version
- after_create :save_version_on_create
- after_update :sync_latest_version
- end
-
- # create the dynamic versioned model
- const_set(versioned_class_name, Class.new(ActiveRecord::Base)).class_eval do
- def self.reloadable? ; false ; end
- end
-
- versioned_resource = self.to_s.demodulize.underscore.to_sym
-
- versioned_class.set_table_name versioned_table_name
- versioned_class.belongs_to versioned_resource,
- :class_name => "::#{self.to_s}",
- :foreign_key => versioned_foreign_key
-
- versioned_class.class_eval("alias_method :versioned_resource, :#{versioned_resource}")
-
- if block_given?
- versioned_class.class_eval(&extension)
- end
-
- end
- end
-
- module ActMethods
- def self.included(base) # :nodoc:
- base.extend ClassMethods
- end
-
- # Finds a specific version of this model.
- def find_version(version)
- return version if version.is_a?(self.class.versioned_class)
- return nil if version.is_a?(ActiveRecord::Base)
- find_versions(:conditions => ['version = ?', version], :limit => 1).first
- end
-
- # Finds versions of this model. Takes an options hash like <tt>find</tt>
- def find_versions(options = {})
- versions.find(:all, options)
- end
-
- # Saves the object as a new version and also saves the original object as the new version.
- # Make sure to create (and thus save) any inner associations beforehand as these won't be saved here.
- def save_as_new_version(revision_comment=nil)
- return false unless self.valid?
- without_update_callbacks do
- set_new_version
- save_version_on_create(revision_comment)
- self.save
- end
- end
-
- def update_version(version_number_to_update, attributes)
- return false if version_number_to_update.nil? or version_number_to_update.to_i < 1
- return false if attributes.nil? or attributes.empty?
- return false unless (ver = find_version(version_number_to_update))
-
- rtn = ver.update_attributes(attributes)
-
- if rtn
- # if the latest version has been updated then update the main table as well
- if version_number_to_update.to_i == eval("#{self.class.version_column}")
- return update_main_to_version(version_number_to_update, true)
- else
- return true
- end
- else
- return false
- end
- end
-
- def destroy_version(version_number)
- if (ver = find_version(version_number))
- without_update_callbacks do
- # For fault tolerance (ie: to prevent data loss through premature deletion), first...
- # Check to see if the current (aka latest) version has to be deleted,
- # and if so update the main table with the data from the version that will become the latest
- if version_number.to_i == eval("#{self.class.version_column}")
- if versions.count > 1
- to_be_latest_version = versions[versions.count-2].version
- else
- return false
- end
- success = update_main_to_version(to_be_latest_version)
- end
-
- # Then... delete the version
- if success
- retrn ver.destroy
- else
- return false
- end
- end
- end
- 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
-
- def without_update_callbacks(&block)
- self.class.without_update_callbacks(&block)
- end
-
- def empty_callback() end #:nodoc:
-
- protected
-
- def set_new_version
- self.send("#{self.class.version_column}=", self.next_version)
- end
-
- # Saves a version of the model in the versioned table. This is called in the after_create callback by default
- def save_version_on_create(revision_comment=nil)
- rev = self.class.versioned_class.new
- rev.version = send(self.class.version_column)
- rev.send("#{self.class.revision_comments_column}=", revision_comment)
- rev.send("#{self.class.versioned_foreign_key}=", self.id)
- self.clone_versioned_model(self, rev)
- saved = rev.save
-
- if saved
- # Now update timestamp columns on main model.
- # Note: main model doesnt get saved yet.
- update_timestamps(rev, self)
- end
-
- return saved
- end
-
- def update_timestamps(from, to)
- begin
- self.timestamp_columns.each do |key|
- if to.has_attribute?(key)
- logger.debug("explicit_versioning - update_timestamps method - setting timestamp_column '#{key}'")
- if eval("from.#{key}.nil?")
- to.send("#{key}=", nil)
- else
- to.send("#{key}=", eval("from.#{key}"))
- end
- end
- end
- rescue => err
- logger.error("ERROR: An error occurred in the explicit_versioning plugin during the update_timestamps method (setting timestamp columns).")
- logger.error("ERROR DETAILS: #{err}")
- end
- end
-
- # This method updates the latest version entry in the versioned table with the data
- # from the main table (since those two entries should always have the same data).
- def sync_latest_version
- ver = versions.last
- clone_versioned_model(self, ver)
- ver.save
- end
-
- # This method updates the entry in the main table with the data from the version specified,
- # and also updates the corresponding version column in the main table to reflect this.
- # Note: this method on its own should not be used to revert to previous versions as it doesn't actualy delete any versions.
- def update_main_to_version(version_number, process_file_columns=true)
- if (ver = find_version(version_number))
- clone_versioned_model(ver, self, process_file_columns)
- self.send("#{self.class.version_column}=", version_number)
-
- # Now update timestamp columns on main model.
- update_timestamps(ver, self)
-
- return self.save
- else
- return false
- end
- end
-
- # Clones a model.
- def clone_versioned_model(orig_model, new_model, process_file_columns=true)
- self.versioned_attributes.each do |key|
- # Make sure to ignore file columns, white list columns, timestamp columns and any other ignore columns
- unless self.file_columns.include?(key) ||
- self.white_list_columns.include?(key) ||
- self.timestamp_columns.include?(key) ||
- self.sync_ignore_columns.include?(key)
- new_model.send("#{key}=", eval("orig_model.#{key}")) if orig_model.respond_to?(key)
- end
- end
-
- if process_file_columns
- # Now copy over file columns
- begin
- self.file_columns.each do |key|
- if orig_model.has_attribute?(key)
- if eval("orig_model.#{key}.nil?")
- logger.debug("DEBUG: file column is nil")
- new_model.send("#{key}=", nil)
- else
- logger.debug("DEBUG: file column is not nil")
- new_model.send("#{key}=", File.open(eval("orig_model.#{key}")))
- FileUtils.cp(eval("orig_model.#{key}"), eval("new_model.#{key}"))
- end
- end
- end
- rescue => err
- logger.error("ERROR: An error occurred in the explicit_versioning plugin during the clone_versioned_model method (copying file columns).")
- logger.error("ERROR DETAILS: #{err}")
- end
- end
-
- # Now set white list columns
- begin
- self.white_list_columns.each do |key|
- if orig_model.has_attribute?(key)
- if eval("orig_model.#{key}.nil?")
- new_model.send("#{key}=", nil)
- else
- new_model.send("#{key}=", eval("orig_model.#{key}"))
- end
- end
- end
- rescue => err
- logger.error("ERROR: An error occurred in the explicit_versioning plugin during the clone_versioned_model method (setting white list columns).")
- logger.error("ERROR DETAILS: #{err}")
- end
-
- # Set version column accordingly.
- if orig_model.is_a?(self.class.versioned_class)
- new_model[new_model.class.inheritance_column] = orig_model[self.class.versioned_inheritance_column]
- elsif new_model.is_a?(self.class.versioned_class)
- new_model[self.class.versioned_inheritance_column] = orig_model[orig_model.class.inheritance_column]
- end
- end
-
- # Gets the next available version for the current record, or 1 for a new record
- def next_version
- return 1 if new_record?
- (versions.calculate(:max, :version) || 0) + 1
- end
-
- # Returns an array of attribute keys that are versioned. See non_versioned_columns
- def versioned_attributes
- self.attributes.keys.select { |k| !self.class.non_versioned_columns.include?(k) } + extra_attributes
- end
-
- module ClassMethods
- # Finds a specific version of a specific row of this model
- def find_version(id, version)
- find_versions(id,
- :conditions => ["#{versioned_foreign_key} = ? AND version = ?", id, version],
- :limit => 1).first
- end
-
- # Finds versions of a specific model. Takes an options hash like <tt>find</tt>
- def find_versions(id, options = {})
- versioned_class.find :all, {
- :conditions => ["#{versioned_foreign_key} = ?", id],
- :order => 'version' }.merge(options)
- end
-
- # Returns an array of columns that are versioned. See non_versioned_columns
- def versioned_columns
- self.columns.select { |c| !non_versioned_columns.include?(c.name) }
- end
-
- # Returns an instance of the dynamic versioned model
- def versioned_class
- const_get versioned_class_name
- end
-
- # Rake migration task to create the versioned table using options passed
- def create_versioned_table(create_table_options = {})
- # create version column in main table if it does not exist
- if !self.content_columns.find { |c| %w(version lock_version).include? c.name }
- self.connection.add_column table_name, :version, :integer
- end
-
- self.connection.create_table(versioned_table_name, create_table_options) do |t|
- t.column versioned_foreign_key, :integer
- t.column :version, :integer
- t.column revision_comments_column, :text
- end
-
- updated_col = nil
- self.versioned_columns.each do |col|
- updated_col = col if !updated_col && %(updated_at updated_on).include?(col.name)
- self.connection.add_column versioned_table_name, col.name, col.type,
- :limit => col.limit,
- :default => col.default
- end
-
- if type_col = self.columns_hash[inheritance_column]
- self.connection.add_column versioned_table_name, versioned_inheritance_column, type_col.type,
- :limit => type_col.limit,
- :default => type_col.default
- end
-
- if updated_col.nil?
- self.connection.add_column versioned_table_name, :updated_at, :timestamp
- end
- end
-
- # Rake migration task to drop the versioned table
- def drop_versioned_table
- self.connection.drop_table versioned_table_name
- end
-
- # Executes the block with the update callbacks disabled.
- #
- # Foo.without_update_callbacks do
- # @foo.save
- # end
- #
- def without_update_callbacks(&block)
- class_eval do
- CALLBACKS.each do |attr_name|
- alias_method "orig_#{attr_name}".to_sym, attr_name
- alias_method attr_name, :empty_callback
- end
- end
- block.call
- ensure
- class_eval do
- CALLBACKS.each do |attr_name|
- alias_method attr_name, "orig_#{attr_name}".to_sym
- end
- end
- end
- end
- end
- end
- end
-end
-
-ActiveRecord::Base.class_eval do
- include Jits::Acts::ExplicitVersioning
-end
Modified: trunk/lib/previews.rb (3064 => 3065)
--- trunk/lib/previews.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/lib/previews.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -5,7 +5,7 @@
self.class_eval do
- belongs_to :preview, :dependent => :destroy
+ belongs_to :preview, :dependent => :destroy, :autosave => true
def image
preview.image_blob.data if preview && preview.image_blob
@@ -17,6 +17,8 @@
def image=(x)
+ x = x.read if x.respond_to?(:read)
+
self.preview = Preview.new if self.preview.nil?
self.preview.image_blob = ContentBlob.new if self.preview.image_blob.nil?
@@ -25,34 +27,13 @@
def svg=(x)
+ x = x.read if x.respond_to?(:read)
+
self.preview = Preview.new if self.preview.nil?
self.preview.svg_blob = ContentBlob.new if self.preview.svg_blob.nil?
self.preview.svg_blob.data = x
end
-
- after_save { |ob|
-
- p = ob.preview
-
- if p
-
- ib = p.image_blob
- sb = p.svg_blob
-
- if ib && ib.data_changed?
- ib.save
- ob.preview.clear_cache
- end
-
- if sb && sb.data_changed?
- sb.save
- ob.preview.clear_cache
- end
-
- p.save
- end
- }
end
end
end
Modified: trunk/lib/rest.rb (3064 => 3065)
--- trunk/lib/rest.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/lib/rest.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -684,7 +684,7 @@
when 'Attribution'; return nil
when 'Tagging'; return nil
- when 'Workflow::Version'; return "#{rest_resource_uri(ob.workflow)}?version=#{ob.version}"
+ when 'WorkflowVersion'; return "#{rest_resource_uri(ob.workflow)}?version=#{ob.version}"
end
raise "Class not processed in rest_resource_uri: #{ob.class.to_s}"
@@ -728,7 +728,7 @@
when 'Creditation'; return "#{base}/credit.xml?id=#{ob.id}"
when 'Attribution'; return nil
- when 'Workflow::Version'; return "#{base}/workflow.xml?id=#{ob.workflow.id}&version=#{ob.version}"
+ when 'WorkflowVersion'; return "#{base}/workflow.xml?id=#{ob.workflow.id}&version=#{ob.version}"
end
raise "Class not processed in rest_access_uri: #{ob.class.to_s}"
@@ -752,7 +752,7 @@
when 'Download'; return 'download'
when 'PackContributableEntry'; return rest_object_tag_text(ob.contributable)
when 'PackRemoteEntry'; return 'external'
- when 'Workflow::Version'; return 'workflow'
+ when 'WorkflowVersion'; return 'workflow'
when 'Comment'; return 'comment'
when 'Bookmark'; return 'favourite'
when 'ContentType'; return 'type'
@@ -784,7 +784,7 @@
when 'Download'; return ''
when 'PackContributableEntry'; return rest_object_label_text(ob.contributable)
when 'PackRemoteEntry'; return ob.title
- when 'Workflow::Version'; return ob.title
+ when 'WorkflowVersion'; return ob.title
when 'ContentType'; return ob.title
when 'License'; return ob.title
when 'CurationEvent'; return ob.category
@@ -1090,12 +1090,15 @@
return rest_response(500, :reason => "Unable to extract metadata")
end
- success = if (action == 'create' and opts[:query]['id'])
- ob.save_as_new_version(revision_comment)
- else
- ob.save
+ new_version = action == 'create' && opts[:query]['id']
+
+ if new_version
+ ob.preview = nil
+ ob[:revision_comments] = revision_comment
end
+ success = ob.save
+
return rest_response(400, :object => ob) unless success
# Elements to update if we're not dealing with a workflow version
@@ -1137,7 +1140,11 @@
case action
when 'create':
return rest_response(401, :reason => "Not authorised to create a file") unless Authorization.is_authorized_for_type?('create', 'Blob', opts[:user], nil)
- ob = Blob.new(:contributor => opts[:user])
+ 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 'read', 'update', 'destroy':
ob, error = obtain_rest_resource('Blob', opts[:query]['id'], opts[:query]['version'], opts[:user], action)
else
@@ -1148,18 +1155,21 @@
if action == "destroy"
+ return rest_response(400, :reason => "Cannot delete individual versions") if opts[:query]['version']
+
ob.destroy
else
data = ""
- title = parse_element(data, :text, '/file/title')
- description = parse_element(data, :text, '/file/description')
- license_type = parse_element(data, :text, '/file/license-type')
- type = parse_element(data, :text, '/file/type')
- content_type = parse_element(data, :text, '/file/content-type')
- content = parse_element(data, :binary, '/file/content')
+ title = parse_element(data, :text, '/file/title')
+ description = parse_element(data, :text, '/file/description')
+ license_type = parse_element(data, :text, '/file/license-type')
+ type = parse_element(data, :text, '/file/type')
+ content_type = parse_element(data, :text, '/file/content-type')
+ content = parse_element(data, :binary, '/file/content')
+ revision_comment = parse_element(data, :text, '/workflow/revision-comment')
permissions = data.find_first('/file/permissions')
@@ -1211,18 +1221,29 @@
ob.content_blob = ContentBlob.new(:data ="" content) if content
- if not ob.save
- return rest_response(400, :object => ob)
+ new_version = action == 'create' && opts[:query][:id]
+
+ if new_version
+ ob[:revision_comments] = revision_comment
end
- if ob.contribution.policy.nil?
- ob.contribution.policy = create_default_policy(opts[:user])
- ob.contribution.save
+ success = ob.save
+
+ 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)
end
-
- update_permissions(ob, permissions)
end
+ ob = ob.versioned_resource if ob.respond_to?("versioned_resource")
+
rest_get_request(ob, opts[:user], { "id" => ob.id.to_s })
end
@@ -2236,10 +2257,10 @@
# Call dispatcher
def rest_call_request(opts)
- begin
+# begin
send(opts[:rules]['Function'], opts)
- rescue
- return rest_response(500)
- end
+# rescue
+# return rest_response(500)
+# end
end
Modified: trunk/lib/sanity_test.rb (3064 => 3065)
--- trunk/lib/sanity_test.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/lib/sanity_test.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -57,9 +57,10 @@
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
+ known_contributables = workflows + blobs + blogs + packs + services
should_be_empty("All users must have a name",
users.select do |u| u.name == nil or u.name.length == 0 end)
Modified: trunk/public/_javascript_s/tabs.js (3064 => 3065)
--- trunk/public/_javascript_s/tabs.js 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/public/_javascript_s/tabs.js 2012-07-31 15:20:18 UTC (rev 3065)
@@ -69,20 +69,27 @@
function showFragment(fragment, scroll) {
- var root = document.all ? "BODY" : "HTML";
- var el = document.getElementById(fragment);
+ var root = document.all ? "BODY" : "HTML";
+ var target = document.getElementById(fragment);
- if (el != undefined) {
+ if (target == undefined) {
+ var namedElements = document.getElementsByName(fragment);
- for (; el.tagName != root; el = parent_el(el)) {
- if (el.className == 'tabContainer') {
- selectTab(el.tabsDiv, el.tabsIndex);
- }
+ if (namedElements.length > 0)
+ target = namedElements[0];
+ }
+
+ if (target == undefined)
+ return;
+
+ for (el = target; el.tagName != root; el = parent_el(el)) {
+ if (el.className == 'tabContainer') {
+ selectTab(el.tabsDiv, el.tabsIndex);
}
}
if (scroll) {
- document.getElementById(fragment).scrollIntoView(false);
+ target.scrollIntoView(false);
}
}
Modified: trunk/public/stylesheets/styles.css (3064 => 3065)
--- trunk/public/stylesheets/styles.css 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/public/stylesheets/styles.css 2012-07-31 15:20:18 UTC (rev 3065)
@@ -1254,16 +1254,6 @@
border: 1px solid #CCCCCC;
}
-.contribution_version_meta_info_box {
- padding: 0.3em 0.6em;
- border: 1px dotted #999999;
- background-color: #FFFFCC;
- color: #333333;
- line-height: 1.2;
- font-size: 85%;
- margin-left: 2.5em;
-}
-
.contribution_currentlicense {
padding: 0 0 0.5em 0;
}
@@ -2335,3 +2325,22 @@
background: #ffc0c0;
}
+.version_history .title {
+ font-size: 16px;
+}
+
+.version_history .metadata {
+ margin-left: 12px;
+ margin-top: 6px;
+ margin-bottom: 6px;
+}
+
+.version_history .comment {
+ padding: 6px;
+ border: 1px dotted #999999;
+ background-color: #FFFFCC;
+ color: #333333;
+ line-height: 1.2;
+ font-size: 85%;
+}
+
Copied: trunk/test/fixtures/blob_versions.yml (from rev 3064, branches/versions/test/fixtures/blob_versions.yml) (0 => 3065)
--- trunk/test/fixtures/blob_versions.yml (rev 0)
+++ trunk/test/fixtures/blob_versions.yml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -0,0 +1,74 @@
+# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
+
+picture:
+ id: 1
+ blob_id: 1
+ version: 1
+ revision_comments: some revision comment
+ local_name: file_picture.png
+ title: Picture
+ body: some text
+ created_at: 2008-04-22 15:32:01
+ content_type_id: 1
+ content_blob_id: 1
+
+text:
+ id: 2
+ blob_id: 2
+ version: 1
+ revision_comments: some revision comment
+ local_name: file_text.txt
+ title: developers.txt
+ body: myExperiment instructions
+ created_at: 2007-01-01 00:00:03
+ content_type_id: 2
+ content_blob_id: 2
+
+for_true_policy:
+ id: 3
+ blob_id: 3
+ version: 1
+ revision_comments: some revision comment
+ local_name: file_picture.png
+ title: for true policy
+ body: some text
+ created_at: 2008-04-22 15:32:01
+ content_type_id: 1
+ content_blob_id: 1
+
+for_false_policy:
+ id: 4
+ blob_id: 4
+ version: 1
+ revision_comments: some revision comment
+ local_name: file_picture.png
+ title: for false policy
+ body: some text
+ created_at: 2008-04-22 15:32:01
+ content_type_id: 1
+ content_blob_id: 1
+
+for_protected_policy:
+ id: 5
+ blob_id: 5
+ 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
+
+for_public_policy:
+ id: 6
+ blob_id: 6
+ version: 1
+ revision_comments: some revision comment
+ local_name: file_picture.png
+ title: for public policy
+ body: some text
+ created_at: 2008-04-22 15:32:01
+ content_type_id: 1
+ content_blob_id: 1
+
Modified: trunk/test/fixtures/blobs.yml (3064 => 3065)
--- trunk/test/fixtures/blobs.yml 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/test/fixtures/blobs.yml 2012-07-31 15:20:18 UTC (rev 3065)
@@ -2,6 +2,7 @@
picture:
id: 1
+ current_version: 1
contributor_id: 1
contributor_type: User
local_name: file_picture.png
@@ -14,6 +15,7 @@
text:
id: 2
+ current_version: 1
contributor_id: 2
contributor_type: User
local_name: file_text.txt
@@ -26,6 +28,7 @@
for_true_policy:
id: 3
+ current_version: 1
contributor_id: 1
contributor_type: User
local_name: file_picture.png
@@ -38,6 +41,7 @@
for_false_policy:
id: 4
+ current_version: 1
contributor_id: 1
contributor_type: User
local_name: file_picture.png
@@ -50,6 +54,7 @@
for_protected_policy:
id: 5
+ current_version: 1
contributor_id: 1
contributor_type: User
local_name: file_picture.png
@@ -62,6 +67,7 @@
for_public_policy:
id: 6
+ current_version: 1
contributor_id: 1
contributor_type: User
local_name: file_picture.png
Modified: trunk/test/functional/api_controller_test.rb (3064 => 3065)
--- trunk/test/functional/api_controller_test.rb 2012-07-31 14:50:51 UTC (rev 3064)
+++ trunk/test/functional/api_controller_test.rb 2012-07-31 15:20:18 UTC (rev 3065)
@@ -115,11 +115,13 @@
title = "Test file title"
title2 = "Updated test file title"
+ title3 = "Updated test file title for versions"
license_type = "by-sa"
content_type = "text/plain"
description = "A description of the test file."
- content = Base64.encode64("This is the content of this test file.")
+ content = Base64.encode64("This is the content of this test file.")
+ content2 = Base64.encode64("This is the content of this test file, version 2.")
# post a file
@@ -140,6 +142,9 @@
file = extra_files.first
+ assert_equal(file.versions.length, 1)
+ assert_equal(file.versions.first.version, 1)
+
# get the file
response = rest_request(:get, 'file', nil, "id" => file.id,
@@ -185,6 +190,53 @@
assert_equal(title2, response.find_first('/file/title').inner_xml)
assert_equal(description, response.find_first('/file/description').inner_xml)
+ # add a new version of the file
+
+ rest_request(:post, 'file', "<?xml version='1.0'?>
+ <file>
+ <title>#{title2}</title>
+ <description>#{description}</description>
+ <license-type>#{license_type}</license-type>
+ <content-type>#{content_type}</content-type>
+ <content>#{content2}</content>
+ </file>", "id" => file.id)
+
+ assert_response(:success)
+
+ file.reload
+
+ assert_equal(2, file.versions.length)
+
+ # update the first version of the file
+
+ rest_request(:put, 'file', "<?xml version='1.0'?>
+ <file>
+ <title>#{title3}</title>
+ </file>", "id" => file.id, "version" => 1)
+
+ assert_response(:success)
+
+ file.reload
+ assert_equal(title3, file.find_version(1).title);
+ assert_equal(title2, file.find_version(2).title);
+ assert_equal(title2, file.title);
+
+ # get each version of the file
+
+ response = rest_request(:get, 'file', nil, "id" => file.id, "version" => "1",
+ "elements" => "title")
+
+ assert_response(:success)
+
+ assert_equal(title3, response.find_first('/file/title').inner_xml)
+
+ response = rest_request(:get, 'file', nil, "id" => file.id, "version" => "2",
+ "elements" => "title")
+
+ assert_response(:success)
+
+ assert_equal(title2, response.find_first('/file/title').inner_xml)
+
# delete the file
rest_request(:delete, 'file', nil, "id" => file.id)