Commit d7da0420d71c19ce5327ccf5cc16b9409e7b30eb
1 parent
bf80644c
Exists in
master
and in
28 other branches
Added methods to return data from specific version
(ActionItem2822)
Showing
6 changed files
with
85 additions
and
32 deletions
Show diff stats
app/controllers/public/content_viewer_controller.rb
@@ -7,7 +7,7 @@ class ContentViewerController < ApplicationController | @@ -7,7 +7,7 @@ class ContentViewerController < ApplicationController | ||
7 | 7 | ||
8 | def view_page | 8 | def view_page |
9 | path = params[:page].join('/') | 9 | path = params[:page].join('/') |
10 | - version = params[:rev] | 10 | + @version = params[:rev] |
11 | 11 | ||
12 | if path.blank? | 12 | if path.blank? |
13 | @page = profile.home_page | 13 | @page = profile.home_page |
@@ -44,8 +44,8 @@ class ContentViewerController < ApplicationController | @@ -44,8 +44,8 @@ class ContentViewerController < ApplicationController | ||
44 | return | 44 | return |
45 | end | 45 | end |
46 | 46 | ||
47 | - if version | ||
48 | - @versioned_article = @page.versions.find_by_version(version) | 47 | + if @version |
48 | + @versioned_article = @page.versions.find_by_version(@version) | ||
49 | render :template => 'content_viewer/versioned_article.rhtml' | 49 | render :template => 'content_viewer/versioned_article.rhtml' |
50 | return | 50 | return |
51 | end | 51 | end |
app/helpers/application_helper.rb
@@ -1402,4 +1402,8 @@ module ApplicationHelper | @@ -1402,4 +1402,8 @@ module ApplicationHelper | ||
1402 | content.nil? ? '' : content.id.to_s | 1402 | content.nil? ? '' : content.id.to_s |
1403 | end | 1403 | end |
1404 | 1404 | ||
1405 | + def display_article_versions(article, version = nil) | ||
1406 | + content_tag('ul', article.versions.map {|v| link_to("r#{v.version}", @page.url.merge(:rev => v.version))}) | ||
1407 | + end | ||
1408 | + | ||
1405 | end | 1409 | end |
app/models/article.rb
@@ -604,17 +604,24 @@ class Article < ActiveRecord::Base | @@ -604,17 +604,24 @@ class Article < ActiveRecord::Base | ||
604 | false | 604 | false |
605 | end | 605 | end |
606 | 606 | ||
607 | - def author | ||
608 | - if versions.empty? | ||
609 | - last_changed_by | ||
610 | - else | ||
611 | - author_id = versions.first.last_changed_by_id | 607 | + def author(version_number = nil) |
608 | + if version_number | ||
609 | + version = versions.find_by_version(version_number) | ||
610 | + author_id = version.last_changed_by_id | ||
612 | Person.exists?(author_id) ? Person.find(author_id) : nil | 611 | Person.exists?(author_id) ? Person.find(author_id) : nil |
612 | + else | ||
613 | + if versions.empty? | ||
614 | + last_changed_by | ||
615 | + else | ||
616 | + author_id = versions.first.last_changed_by_id | ||
617 | + Person.exists?(author_id) ? Person.find(author_id) : nil | ||
618 | + end | ||
613 | end | 619 | end |
614 | end | 620 | end |
615 | 621 | ||
616 | - def author_name | ||
617 | - author ? author.name : (setting[:author_name] || _('Unknown')) | 622 | + def author_name(version_number = nil) |
623 | + person = version_number ? author(version_number) : author | ||
624 | + person ? person.name : (setting[:author_name] || _('Unknown')) | ||
618 | end | 625 | end |
619 | 626 | ||
620 | def author_url | 627 | def author_url |
@@ -625,6 +632,11 @@ class Article < ActiveRecord::Base | @@ -625,6 +632,11 @@ class Article < ActiveRecord::Base | ||
625 | author ? author.id : nil | 632 | author ? author.id : nil |
626 | end | 633 | end |
627 | 634 | ||
635 | + def version_license(version_number = nil) | ||
636 | + return license if version_number.nil? | ||
637 | + profile.environment.licenses.find_by_id(versions.find_by_version(version_number).license_id) | ||
638 | + end | ||
639 | + | ||
628 | alias :active_record_cache_key :cache_key | 640 | alias :active_record_cache_key :cache_key |
629 | def cache_key(params = {}, the_profile = nil, language = 'en') | 641 | def cache_key(params = {}, the_profile = nil, language = 'en') |
630 | active_record_cache_key+'-'+language + | 642 | active_record_cache_key+'-'+language + |
app/views/content_viewer/versioned_article.rhtml
1 | <div id="article" class="<%= @page.css_class_name %>"> | 1 | <div id="article" class="<%= @page.css_class_name %>"> |
2 | 2 | ||
3 | -<div id="article-toolbar"><%= _("This is the revision %s of this content") % @versioned_article.version %></div> | ||
4 | - | ||
5 | -<% if @page.display_hits? || @page.license.present? %> | ||
6 | - <div id='article-sub-header'> | ||
7 | - <% if @versioned_article.license.present? %> | ||
8 | - <div id="article-license"> | ||
9 | - <%= _('Licensed under %s') % (@versioned_article.license.url.present? ? link_to(@versioned_article.license.name, @versioned_article.license.url, :target => '_blank') : @versioned_article.license.name) %> | ||
10 | - </div> | ||
11 | - <% end %> | 3 | + <div id="article-header"> |
4 | + <h1 class='title'><%= @versioned_article.name %></h1> | ||
5 | + <%= _("Version %{version} - %{author} on %{date}") % {:version => @version, :author => @page.author_name(@version), :date => show_time(@versioned_article.updated_at) } %> | ||
12 | </div> | 6 | </div> |
13 | -<% end %> | ||
14 | 7 | ||
15 | -<% cache(@page.cache_key(params, user, language)) do %> | ||
16 | - <div class="<%="article-body article-body-" + @page.css_class_name %>"> | ||
17 | - <% options = @page.image? ? {:gallery_view => true} : {} %> | ||
18 | - <%= article_to_html(@page, options) %> | ||
19 | - <br style="clear:both" /> | ||
20 | - </div> <!-- end class="article-body" --> | ||
21 | -<% end %> | 8 | + <% if @page.version_license(@version).present? %> |
9 | + <div id='article-sub-header'> | ||
10 | + <% if @page.version_license(@version).present? %> | ||
11 | + <div id="article-license"> | ||
12 | + <%= _('Licensed under %s') % (@page.version_license(@version).url.present? ? link_to(@page.version_license(@version).name, @page.version_license(@version).url, :target => '_blank') : @page.version_license(@version).name) %> | ||
13 | + </div> | ||
14 | + <% end %> | ||
15 | + </div> | ||
16 | + <% end %> | ||
22 | 17 | ||
18 | + <% cache(@page.cache_key(params, user, language)) do %> | ||
19 | + <div class="<%="article-body article-body-" + @page.css_class_name %>"> | ||
20 | + <%= @versioned_article.body %> | ||
21 | + <br style="clear:both" /> | ||
22 | + </div> <!-- end class="article-body" --> | ||
23 | + <% end %> | ||
23 | 24 | ||
24 | -<div id="article-versions"> | ||
25 | - <%= #TODO Review this %> | ||
26 | - <%= @page.versions.map {|v| link_to("r#{v.version}", @page.url.merge(:rev => v.version))} %> | ||
27 | -</div> | 25 | + <div id="article-versions"> |
26 | + <%= render :partial => 'article_versions' %> | ||
27 | + </div> | ||
28 | 28 | ||
29 | -<%= display_source_info(@versioned_article) %> | 29 | + <%= display_source_info(@page) %> |
30 | 30 | ||
31 | </div><!-- end id="article" --> | 31 | </div><!-- end id="article" --> |
32 | <%= add_zoom_to_article_images %> | 32 | <%= add_zoom_to_article_images %> |
test/unit/article_test.rb
@@ -1693,6 +1693,16 @@ class ArticleTest < ActiveSupport::TestCase | @@ -1693,6 +1693,16 @@ class ArticleTest < ActiveSupport::TestCase | ||
1693 | assert_equal license, article.license | 1693 | assert_equal license, article.license |
1694 | end | 1694 | end |
1695 | 1695 | ||
1696 | + should 'return license from a specific version' do | ||
1697 | + cc = License.create!(:name => 'CC (by)', :environment => Environment.default) | ||
1698 | + gpl = License.create!(:name => 'GPLv3', :environment => Environment.default) | ||
1699 | + article = Article.create!(:name => 'first version', :profile => profile, :license => cc) | ||
1700 | + article.license = gpl | ||
1701 | + article.save | ||
1702 | + assert_equal cc, article.version_license(1) | ||
1703 | + assert_equal gpl, article.version_license(2) | ||
1704 | + end | ||
1705 | + | ||
1696 | should 'update path if parent is changed' do | 1706 | should 'update path if parent is changed' do |
1697 | f1 = Folder.create!(:name => 'Folder 1', :profile => profile) | 1707 | f1 = Folder.create!(:name => 'Folder 1', :profile => profile) |
1698 | f2 = Folder.create!(:name => 'Folder 2', :profile => profile) | 1708 | f2 = Folder.create!(:name => 'Folder 2', :profile => profile) |
@@ -1751,6 +1761,28 @@ class ArticleTest < ActiveSupport::TestCase | @@ -1751,6 +1761,28 @@ class ArticleTest < ActiveSupport::TestCase | ||
1751 | assert_nil article.author_id | 1761 | assert_nil article.author_id |
1752 | end | 1762 | end |
1753 | 1763 | ||
1764 | + should "return the author of a specific version" do | ||
1765 | + author1 = fast_create(Person) | ||
1766 | + author2 = fast_create(Person) | ||
1767 | + article = Article.create!(:name => 'first version', :profile => profile, :last_changed_by => author1) | ||
1768 | + article.name = 'second version' | ||
1769 | + article.last_changed_by = author2 | ||
1770 | + article.save | ||
1771 | + assert_equal author1, article.author(1) | ||
1772 | + assert_equal author2, article.author(2) | ||
1773 | + end | ||
1774 | + | ||
1775 | + should "return the author_name of a specific version" do | ||
1776 | + author1 = fast_create(Person) | ||
1777 | + author2 = fast_create(Person) | ||
1778 | + article = Article.create!(:name => 'first version', :profile => profile, :last_changed_by => author1) | ||
1779 | + article.name = 'second version' | ||
1780 | + article.last_changed_by = author2 | ||
1781 | + article.save | ||
1782 | + assert_equal author1.name, article.author_name(1) | ||
1783 | + assert_equal author2.name, article.author_name(2) | ||
1784 | + end | ||
1785 | + | ||
1754 | should 'identify if belongs to forum' do | 1786 | should 'identify if belongs to forum' do |
1755 | p = create_user('user_forum_test').person | 1787 | p = create_user('user_forum_test').person |
1756 | forum = fast_create(Forum, :name => 'Forum test', :profile_id => p.id) | 1788 | forum = fast_create(Forum, :name => 'Forum test', :profile_id => p.id) |