browsercms 3.0.2 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/controllers/cms/content_block_controller.rb +25 -2
- data/app/controllers/cms/content_controller.rb +31 -2
- data/app/controllers/cms/dashboard_controller.rb +2 -1
- data/app/controllers/cms/error_handling.rb +9 -2
- data/app/controllers/cms/links_controller.rb +2 -0
- data/app/controllers/cms/pages_controller.rb +22 -18
- data/app/controllers/cms/section_nodes_controller.rb +1 -1
- data/app/controllers/cms/sections_controller.rb +12 -7
- data/app/controllers/cms/sessions_controller.rb +17 -10
- data/app/controllers/cms/users_controller.rb +8 -6
- data/app/helpers/cms/application_helper.rb +2 -6
- data/app/helpers/cms/menu_helper.rb +118 -146
- data/app/helpers/cms/page_helper.rb +2 -2
- data/app/models/attachment.rb +2 -2
- data/app/models/group.rb +13 -2
- data/app/models/guest_user.rb +9 -3
- data/app/models/link.rb +2 -2
- data/app/models/page.rb +1 -1
- data/app/models/section.rb +7 -2
- data/app/models/user.rb +35 -17
- data/app/views/cms/blocks/_toolbar_for_member.html.erb +3 -3
- data/app/views/cms/blocks/index.html.erb +11 -6
- data/app/views/cms/content/show.html.erb +3 -3
- data/app/views/cms/menus/_menu.html.erb +9 -0
- data/app/views/cms/menus/_menu_item.html.erb +11 -0
- data/app/views/cms/pages/_edit_connector.html.erb +1 -1
- data/app/views/cms/pages/_edit_container.html.erb +1 -1
- data/app/views/cms/section_nodes/_node.html.erb +1 -1
- data/app/views/cms/sections/_form.html.erb +36 -34
- data/app/views/cms/shared/access_denied.html.erb +3 -0
- data/app/views/cms/users/change_password.html.erb +8 -6
- data/app/views/cms/users/index.html.erb +1 -1
- data/app/views/cms/users/show.html.erb +50 -0
- data/app/views/layouts/_cms_toolbar.html.erb +1 -1
- data/app/views/layouts/_page_toolbar.html.erb +7 -7
- data/app/views/layouts/cms/administration.html.erb +24 -7
- data/browsercms.gemspec +13 -7
- data/lib/acts_as_list.rb +8 -4
- data/lib/cms/acts/content_block.rb +1 -1
- data/lib/cms/authentication/controller.rb +26 -7
- data/lib/cms/behaviors/attaching.rb +3 -3
- data/lib/cms/behaviors/publishing.rb +12 -1
- data/lib/cms/behaviors/rendering.rb +17 -4
- data/lib/cms/behaviors/versioning.rb +2 -2
- data/lib/cms/routes.rb +4 -0
- data/lib/tasks/cms.rake +0 -18
- data/public/javascripts/cms/content_library.js +36 -0
- data/public/javascripts/cms/sitemap.js +21 -9
- data/public/stylesheets/cms/form_layout.css +16 -2
- data/public/stylesheets/cms/nav.css +4 -3
- data/test/functional/cms/content_block_controller_test.rb +120 -0
- data/test/functional/cms/content_controller_test.rb +135 -80
- data/test/functional/cms/links_controller_test.rb +89 -1
- data/test/functional/cms/pages_controller_test.rb +138 -0
- data/test/functional/cms/section_nodes_controller_test.rb +45 -5
- data/test/functional/cms/sections_controller_test.rb +148 -1
- data/test/functional/cms/sessions_controller_test.rb +26 -2
- data/test/functional/cms/users_controller_test.rb +49 -2
- data/test/test_helper.rb +3 -1
- data/test/unit/behaviors/attaching_test.rb +26 -0
- data/test/unit/helpers/menu_helper_test.rb +118 -278
- data/test/unit/models/group_test.rb +6 -0
- data/test/unit/models/user_test.rb +127 -29
- metadata +12 -4
@@ -1,4 +1,4 @@
|
|
1
|
-
<div class="cms_edit_connectable" style="display: block; height: auto;
|
1
|
+
<div class="cms_edit_connectable" style="display: block; height: auto; position: relative; border: 1px solid #999; margin: 1px -6px 0 -6px; padding: 25px 5px 0 5px; background: url(/images/cms/containers/beta.png) repeat-x 0 0;">
|
2
2
|
<div style="display: block; width: 100%; position: absolute; top: 5px; left: 5px; height: 30px;">
|
3
3
|
<%= link_to image_tag("cms/pages/show_connectable.gif", :style => "text-decoration: none; padding: 0; background: none; margin: 0; float: none; border: none;"), cms_connectable_path(connectable), :title => "View this content (#{connectable.name})" , :style => "text-decoration: none; padding: 0 2px 0 0; background: none; margin: 0; float: none; border: none;"%>
|
4
4
|
<%= link_to image_tag("cms/pages/edit_connectable.gif", :style => "text-decoration: none; padding: 0; background: none; margin: 0; float: none; border: none;"), edit_cms_connectable_path(connectable, :_redirect_to => @page.path), :title => "Edit this content (#{connectable.name})" , :style => "text-decoration: none; padding: 0 2px 0 0; background: none; margin: 0; float: none; border: none;"%>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<div class="cms_edit_container" style="height: auto;
|
1
|
+
<div class="cms_edit_container" style="height: auto; background: url(/images/cms/containers/alpha.png) repeat-x 0 0; border: 1px solid #999; margin: -8px 0 0 -8px; padding: 24px 7px 1px 7px; position: relative;">
|
2
2
|
<div style="display: block; width: 100%; position: absolute; top: 5px; left: 5px; height: 30px;">
|
3
3
|
<%= link_to image_tag("cms/pages/add_connectable.gif", :style => "text-decoration: none; padding: 0; background: none; margin: 0; float: none; border: none;"), cms_content_types_path(:connect_to_page_id => @page, :connect_to_container => name), :title => "Add new content to this container (#{name})" , :style => "text-decoration: none; padding: 0 2px 0 0; background: none; margin: 0; float: none; border: none;"%>
|
4
4
|
<%= link_to image_tag("cms/pages/connect_connectable.gif", :style => "text-decoration: none; padding: 0; background: none; margin: 0; float: none; border: none;"), new_cms_connector_path(:page_id => @page, :container => name), :title => "Insert existing content into this container (#{name})" , :style => "text-decoration: none; padding: 0 2px 0 0; background: none; margin: 0; float: none; border: none;"%>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<table class="section_node <%= node_type %> <%= "movable" if current_user.able_to?(:publish_content) %>" width="100%" cellspacing="0" cellpadding="0">
|
9
9
|
<tr><td colspan="4" class="drop-before"></td></tr>
|
10
10
|
<tr<%= ' class="doubled"' if access_icon && hidden %>>
|
11
|
-
<td id="<%= node_type %>_<%= node.id %>" class="<%= node_type == "section" && node.root? ? 'root' : '' %> <%= node_type %> node">
|
11
|
+
<td id="<%= node_type %>_<%= node.id %>" class="<%= node_type == "section" && node.root? ? 'root' : '' %> <%= node_type %> node <%= 'non-editable' unless current_user.able_to_edit?(node) %>">
|
12
12
|
<%= icon %>
|
13
13
|
<div><%= h(node.name) %></div>
|
14
14
|
</td>
|
@@ -11,46 +11,48 @@
|
|
11
11
|
</div>
|
12
12
|
</div>
|
13
13
|
|
14
|
-
|
15
|
-
<
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
14
|
+
<% able_to?(:administrate) do %>
|
15
|
+
<div class="checkbox_group fields" style="float: left; width: 100%">
|
16
|
+
<label>Public Permissions</label>
|
17
|
+
<%= hidden_field_tag "section[group_ids][]", "", :id => nil %>
|
18
|
+
<div class="checkboxes">
|
19
|
+
<% for group in public_groups %>
|
20
|
+
<div class="checkbox_fields">
|
21
|
+
<%= check_box_tag "section[group_ids][]", group.id,
|
22
|
+
@section.groups.include?(group), :class => "public_group_ids", :id => "public_group_ids_#{group.id}", :tabindex => next_tabindex %>
|
23
|
+
<label for="public_group_ids_<%= group.id %>"><%= group.name %></label>
|
24
|
+
</div>
|
25
|
+
<% end %>
|
26
|
+
<div class="instructions">Which “Public” groups can view pages in this section?</div>
|
27
|
+
<div class="check_uncheck">
|
28
|
+
<%= link_to_check_all 'input.public_group_ids' %>,
|
29
|
+
<%= link_to_uncheck_all 'input.public_group_ids' %>
|
30
|
+
</div>
|
29
31
|
</div>
|
30
32
|
</div>
|
31
|
-
</div>
|
32
33
|
|
33
|
-
<br clear="all" />
|
34
|
+
<br clear="all" />
|
34
35
|
|
35
|
-
<div class="checkbox_group fields" style="float: left; width: 100%">
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
36
|
+
<div class="checkbox_group fields" style="float: left; width: 100%">
|
37
|
+
<label>CMS Permissions</label>
|
38
|
+
<%= hidden_field_tag "section[group_ids][]", "", :id => nil %>
|
39
|
+
<div class="checkboxes">
|
40
|
+
<% for group in cms_groups %>
|
41
|
+
<div class="checkbox_fields">
|
42
|
+
<%= check_box_tag "section[group_ids][]", group.id,
|
43
|
+
@section.groups.include?(group), :class => "cms_group_ids", :id => "cms_group_ids_#{group.id}", :tabindex => next_tabindex %>
|
44
|
+
<label for="cms_group_ids_<%= group.id %>"><%= group.name %></label>
|
45
|
+
</div>
|
46
|
+
<% end %>
|
47
|
+
<div class="instructions">Which “CMS” groups can edit pages and content in this section?</div>
|
48
|
+
<div class="check_uncheck">
|
49
|
+
<%= link_to_check_all 'input.cms_group_ids' %>,
|
50
|
+
<%= link_to_uncheck_all 'input.cms_group_ids' %>
|
51
|
+
</div>
|
50
52
|
</div>
|
51
53
|
</div>
|
52
|
-
|
53
|
-
|
54
|
+
<br clear="all" />
|
55
|
+
<% end %>
|
54
56
|
|
55
57
|
<div class="buttons">
|
56
58
|
<%= lt_button_wrapper(f.submit("Save", :class => "submit", :tabindex => next_tabindex)) %>
|
@@ -1,10 +1,12 @@
|
|
1
1
|
<% @page_title = @toolbar_title = "Set New Password" %>
|
2
|
-
<%
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
<% able_to? :administrate do %>
|
3
|
+
<% content_for :toolbar_links do %>
|
4
|
+
<%= link_to(span_tag("List All"), url_for(:controller => "users", :action => "index"), :id => "list_all_button", :class => "button") %>
|
5
|
+
<%= link_to(span_tag("Edit User"), url_for(:controller => "users", :action => "edit", :id => @user.id), :id => "edit_user_button", :class => "button") %>
|
6
|
+
<% end %>
|
6
7
|
|
7
|
-
<%= content_for :functions, render(:partial => "toolbar") %>
|
8
|
+
<%= content_for :functions, render(:partial => "toolbar") %>
|
9
|
+
<% end %>
|
8
10
|
|
9
11
|
<% content_for :html_head do %>
|
10
12
|
<%= stylesheet_link_tag('cms/form_layout') %>
|
@@ -16,4 +18,4 @@
|
|
16
18
|
<div class="buttons">
|
17
19
|
<%= lt_button_wrapper(f.submit("Save", :class => "submit")) %>
|
18
20
|
</div>
|
19
|
-
<% end %>
|
21
|
+
<% end %>
|
@@ -26,7 +26,7 @@
|
|
26
26
|
<% @users.each do |user|%>
|
27
27
|
<tr>
|
28
28
|
<td class="first"></td>
|
29
|
-
<td><div class="dividers"><%= link_to "#{user.first_name} #{user.last_name}",
|
29
|
+
<td><div class="dividers"><%= link_to "#{user.first_name} #{user.last_name}", edit_cms_user_path(user) %></div></td>
|
30
30
|
<td><div class="dividers"><%= link_to user.email, "mailto:#{user.email}" %></div></td>
|
31
31
|
<td>
|
32
32
|
<div class="dividers">
|
@@ -0,0 +1,50 @@
|
|
1
|
+
<% @page_title = @toolbar_title = h(@user.login) %>
|
2
|
+
|
3
|
+
<% content_for :toolbar_links do %>
|
4
|
+
<%= link_to(span_tag("List All"), cms_users_path,
|
5
|
+
:id => "list_all_button",
|
6
|
+
:class => "button") if current_user.able_to?(:administrate) %>
|
7
|
+
<%= link_to(span_tag("Change Password"), [:change_password, :cms, @user],
|
8
|
+
:id => "change_password_button",
|
9
|
+
:class => "button") %>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<% content_for :functions do %>
|
13
|
+
<%= render(:partial => "toolbar") %>
|
14
|
+
<% end %>
|
15
|
+
|
16
|
+
<% content_for :html_head do %>
|
17
|
+
<%= stylesheet_link_tag('cms/form_layout') %>
|
18
|
+
<% end %>
|
19
|
+
|
20
|
+
<div class="faux_form">
|
21
|
+
<div class="fields">
|
22
|
+
<span class="label">Username</span>
|
23
|
+
<%=h @user.login %>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<div class="fields">
|
27
|
+
<span class="label">Email</span>
|
28
|
+
<%=h @user.email %>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<div class="fields">
|
32
|
+
<span class="label">First name</span>
|
33
|
+
<%=h @user.first_name %>
|
34
|
+
</div>
|
35
|
+
|
36
|
+
<div class="fields">
|
37
|
+
<span class="label">Last name</span>
|
38
|
+
<%=h @user.last_name %>
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<div class="fields">
|
42
|
+
<span class="label">Groups</span>
|
43
|
+
|
44
|
+
<ul>
|
45
|
+
<% @user.groups.each do |group| -%>
|
46
|
+
<li><%= group.name %></li>
|
47
|
+
<% end -%>
|
48
|
+
</ul>
|
49
|
+
</div>
|
50
|
+
</div>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<% able_to?(:administrate) do %><li><%= link_to image_tag("/images/cms/nav_admin#{'_on' if tab == :administration}.gif", :id => 'nav_admin_img'), cms_administration_path, :target => "_top" %></li><% end %>
|
9
9
|
</ul>
|
10
10
|
<ul id="userlinks">
|
11
|
-
<li id="user_info"><%= image_tag "cms/icons/user.png"
|
11
|
+
<li id="user_info"><a href="<%= current_user.able_to?(:administrate) ? edit_cms_user_path(current_user) : cms_user_path(current_user) %>" target="_top"><%= image_tag "cms/icons/user.png" %> <%= current_user.full_name %></a></li>
|
12
12
|
<li><%= link_to "Logout", cms_logout_path, :class => "http_delete", :target => "_top" %></li>
|
13
13
|
</ul>
|
14
14
|
<% flash_class, flash_message = flash.to_a.first %>
|
@@ -50,30 +50,30 @@
|
|
50
50
|
<%= link_to "<span>Publish</span>",
|
51
51
|
@page.live? ? '#' : publish_cms_page_path(@page),
|
52
52
|
:id => "publish_button",
|
53
|
-
:class => "http_put button#{' disabled' if !current_user.able_to?(:publish_content) || @page.version != @page.draft.version || @page.live?} left",
|
53
|
+
:class => "http_put button#{' disabled' if !current_user.able_to?(:publish_content) || !current_user.able_to_edit?(@page) || @page.version != @page.draft.version || @page.live?} left",
|
54
54
|
:target => "_top" %>
|
55
55
|
|
56
56
|
<%= link_to "<span>Assign</span>",
|
57
57
|
new_cms_page_task_path(@page),
|
58
58
|
:id => "assign_button",
|
59
|
-
:class => "button#{ ' disabled' if @page.assigned_to == current_user} middle",
|
59
|
+
:class => "button#{ ' disabled' if @page.assigned_to == current_user || !current_user.able_to_edit?(@page) } middle",
|
60
60
|
:target => "_top" %>
|
61
61
|
|
62
62
|
<%= link_to "<span>Complete Task</span>",
|
63
63
|
@page.current_task ? complete_cms_task_path(@page.current_task) : '#',
|
64
64
|
:id => "complete_task_button",
|
65
|
-
:class => "http_put button#{ ' disabled'
|
65
|
+
:class => "http_put button#{ ' disabled' if @page.assigned_to != current_user || !current_user.able_to_edit?(@page) } right",
|
66
66
|
:target => "_top" %>
|
67
67
|
|
68
68
|
<%= link_to "<span>Edit Properties</span>",
|
69
69
|
[:edit, :cms, @page],
|
70
70
|
:id => "edit_properties_button",
|
71
|
-
:class => "spacer button",
|
71
|
+
:class => "spacer button#{ ' disabled' unless current_user.able_to_edit?(@page) }",
|
72
72
|
:target => "_top" %>
|
73
73
|
|
74
74
|
<%= link_to "<span>List Versions</span>",
|
75
75
|
versions_cms_page_path(@page),
|
76
|
-
:class => "spacer button",
|
76
|
+
:class => "spacer button#{ ' disabled' unless current_user.able_to_edit?(@page) }",
|
77
77
|
:target => "_top" %>
|
78
78
|
|
79
79
|
<% able_to? :publish_content do %>
|
@@ -83,7 +83,7 @@
|
|
83
83
|
:id => "delete_button",
|
84
84
|
:title => "Are you sure you want to delete '#{@page.name}'?",
|
85
85
|
:target => "_top",
|
86
|
-
:class => "spacer button confirm_with_title http_delete" %>
|
86
|
+
:class => "spacer button confirm_with_title http_delete#{ ' disabled' unless current_user.able_to_publish?(@page) }" %>
|
87
87
|
<% else %>
|
88
88
|
<%= link_to "<span>Revert to this Version</span>",
|
89
89
|
revert_to_cms_page_path(@page, @page.version),
|
@@ -98,7 +98,7 @@
|
|
98
98
|
<div class="visual_editor_label">Visual Editor:</div>
|
99
99
|
<div class="visual_editor_value_container">
|
100
100
|
<% if @mode == "edit" %>
|
101
|
-
<div><span id="visual_editor_state"
|
101
|
+
<div><span id="visual_editor_state"<%= ' title="You don\'t have permission to edit this page"' unless current_user.able_to_edit?(@page) %>>ON<%= '*' unless current_user.able_to_edit?(@page) %></span></div>
|
102
102
|
<% else %>
|
103
103
|
<div><span id="visual_editor_state">OFF</span></div>
|
104
104
|
<% end %>
|
@@ -7,18 +7,29 @@
|
|
7
7
|
<div id="wrapper">
|
8
8
|
<%= render_cms_toolbar(:administration) %>
|
9
9
|
<div id="main">
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
|
11
|
+
<% if current_user.able_to?(:administrate) %>
|
12
|
+
<div class="top_cap_menu"></div>
|
13
|
+
<div id="menu">
|
14
|
+
<%= render :partial => 'cms/shared/admin_sidebar' %>
|
15
|
+
</div>
|
16
|
+
<div id="contentwrap">
|
17
|
+
<% else %>
|
18
|
+
<div class="top_cap"></div>
|
19
|
+
<div id="contentwrapbig">
|
20
|
+
<% end %>
|
21
|
+
|
15
22
|
<div id="functions">
|
16
23
|
<h1><%= @toolbar_title %></h1>
|
17
24
|
<%= yield :functions %>
|
18
25
|
|
19
26
|
</div>
|
20
27
|
<br clear="all" />
|
21
|
-
|
28
|
+
|
29
|
+
<% able_to?(:administrate) do %>
|
30
|
+
<div class="top_cap_content"></div>
|
31
|
+
<% end %>
|
32
|
+
|
22
33
|
<div id="content">
|
23
34
|
<div class="pad">
|
24
35
|
<%= yield %>
|
@@ -26,7 +37,13 @@
|
|
26
37
|
</div>
|
27
38
|
</div>
|
28
39
|
<br clear="all" />
|
29
|
-
|
40
|
+
|
41
|
+
<% if current_user.able_to?(:administrate) %>
|
42
|
+
<div class="bottom_cap_content"></div>
|
43
|
+
<% else %>
|
44
|
+
<div class="bottom_cap"></div>
|
45
|
+
<% end %>
|
46
|
+
|
30
47
|
<%= render :partial => 'layouts/cms/footer' %>
|
31
48
|
</div>
|
32
49
|
</div>
|
data/browsercms.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{browsercms}
|
8
|
-
s.version = "3.0.
|
8
|
+
s.version = "3.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["BrowserMedia"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-11-06}
|
13
13
|
s.email = %q{github@browsermedia.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE.txt",
|
@@ -155,6 +155,8 @@ Gem::Specification.new do |s|
|
|
155
155
|
"app/views/cms/links/destroy.js.rjs",
|
156
156
|
"app/views/cms/links/edit.html.erb",
|
157
157
|
"app/views/cms/links/new.html.erb",
|
158
|
+
"app/views/cms/menus/_menu.html.erb",
|
159
|
+
"app/views/cms/menus/_menu_item.html.erb",
|
158
160
|
"app/views/cms/page_routes/_form.html.erb",
|
159
161
|
"app/views/cms/page_routes/edit.html.erb",
|
160
162
|
"app/views/cms/page_routes/index.html.erb",
|
@@ -191,6 +193,7 @@ Gem::Specification.new do |s|
|
|
191
193
|
"app/views/cms/shared/_pagination.html.erb",
|
192
194
|
"app/views/cms/shared/_version_conflict_diff.html.erb",
|
193
195
|
"app/views/cms/shared/_version_conflict_error.html.erb",
|
196
|
+
"app/views/cms/shared/access_denied.html.erb",
|
194
197
|
"app/views/cms/shared/error.html.erb",
|
195
198
|
"app/views/cms/tags/_form.html.erb",
|
196
199
|
"app/views/cms/tags/render.html.erb",
|
@@ -205,6 +208,7 @@ Gem::Specification.new do |s|
|
|
205
208
|
"app/views/cms/users/edit.html.erb",
|
206
209
|
"app/views/cms/users/index.html.erb",
|
207
210
|
"app/views/cms/users/new.html.erb",
|
211
|
+
"app/views/cms/users/show.html.erb",
|
208
212
|
"app/views/layouts/_cms_toolbar.html.erb",
|
209
213
|
"app/views/layouts/_page_toolbar.html.erb",
|
210
214
|
"app/views/layouts/application.html.erb",
|
@@ -1168,6 +1172,7 @@ Gem::Specification.new do |s|
|
|
1168
1172
|
"public/images/cms/usercontrols_bg.png",
|
1169
1173
|
"public/images/cms/usercontrols_bg_cap.png",
|
1170
1174
|
"public/javascripts/cms/application.js",
|
1175
|
+
"public/javascripts/cms/content_library.js",
|
1171
1176
|
"public/javascripts/cms/editor.js",
|
1172
1177
|
"public/javascripts/cms/sitemap.js",
|
1173
1178
|
"public/javascripts/jquery-ui.js",
|
@@ -1228,12 +1233,11 @@ Gem::Specification.new do |s|
|
|
1228
1233
|
"templates/demo.rb",
|
1229
1234
|
"templates/module.rb"
|
1230
1235
|
]
|
1231
|
-
s.has_rdoc = true
|
1232
1236
|
s.homepage = %q{http://www.browsercms.org}
|
1233
1237
|
s.rdoc_options = ["--charset=UTF-8"]
|
1234
1238
|
s.require_paths = ["lib"]
|
1235
1239
|
s.rubyforge_project = %q{browsercms}
|
1236
|
-
s.rubygems_version = %q{1.3.
|
1240
|
+
s.rubygems_version = %q{1.3.5}
|
1237
1241
|
s.summary = %q{BrowserCMS is a general purpose, open source Web Content Management System (CMS), written in Ruby on Rails.}
|
1238
1242
|
s.test_files = [
|
1239
1243
|
"test/functional/cms/file_blocks_controller_test.rb",
|
@@ -1248,6 +1252,7 @@ Gem::Specification.new do |s|
|
|
1248
1252
|
"test/functional/cms/links_controller_test.rb",
|
1249
1253
|
"test/functional/cms/dynamic_views_controller_test.rb",
|
1250
1254
|
"test/functional/cms/categories_controller_test.rb",
|
1255
|
+
"test/functional/cms/content_block_controller_test.rb",
|
1251
1256
|
"test/functional/cms/pages_controller_test.rb",
|
1252
1257
|
"test/functional/cms/connectors_controller_test.rb",
|
1253
1258
|
"test/functional/cms/home_controller_test.rb",
|
@@ -1303,7 +1308,7 @@ Gem::Specification.new do |s|
|
|
1303
1308
|
|
1304
1309
|
if s.respond_to? :specification_version then
|
1305
1310
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
1306
|
-
s.specification_version =
|
1311
|
+
s.specification_version = 3
|
1307
1312
|
|
1308
1313
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
1309
1314
|
else
|
@@ -1311,3 +1316,4 @@ Gem::Specification.new do |s|
|
|
1311
1316
|
else
|
1312
1317
|
end
|
1313
1318
|
end
|
1319
|
+
|
data/lib/acts_as_list.rb
CHANGED
@@ -61,7 +61,7 @@ module ActsAsList
|
|
61
61
|
|
62
62
|
#{scope_condition_method}
|
63
63
|
|
64
|
-
before_destroy :
|
64
|
+
before_destroy :remove_from_list_without_saving
|
65
65
|
before_create :add_to_list_bottom
|
66
66
|
EOV
|
67
67
|
end
|
@@ -118,13 +118,17 @@ module ActsAsList
|
|
118
118
|
end
|
119
119
|
|
120
120
|
# Removes the item from the list.
|
121
|
-
def remove_from_list
|
121
|
+
def remove_from_list(save = true)
|
122
122
|
if in_list?
|
123
123
|
decrement_positions_on_lower_items
|
124
|
-
update_attribute
|
124
|
+
update_attribute(position_column, nil) if save
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
128
|
+
def remove_from_list_without_saving
|
129
|
+
self.remove_from_list(false)
|
130
|
+
end
|
131
|
+
|
128
132
|
# Increase the position of this item without adjusting the rest of the list.
|
129
133
|
def increment_position
|
130
134
|
return unless in_list?
|
@@ -249,4 +253,4 @@ module ActsAsList
|
|
249
253
|
self.update_attribute(position_column, position)
|
250
254
|
end
|
251
255
|
end
|
252
|
-
end
|
256
|
+
end
|
@@ -1,3 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# Defines the authentication behavior for controllers in BrowserCMS. It can be added to any controller that needs to
|
3
|
+
# hook into the BrowserCMS Authentication behavior like so:
|
4
|
+
#
|
5
|
+
# class MySuperSecureController < ApplicationController
|
6
|
+
# include Cms::Authentication::Controller
|
7
|
+
#
|
8
|
+
# It is based off Restful_Authentication, and adds in behavior to deal with several concepts specific to BrowserCMS.
|
9
|
+
#
|
10
|
+
# (Note: 10/8/09 - I was comparing this to a very old version of the generated code from Restful_Authentication,
|
11
|
+
# so some of the following items may be 'stock' to that. (Especially #2)
|
12
|
+
#
|
13
|
+
# 1. Guests - These represents users that are not logged in. What guests can see and do can be modified via the CMS UI. Guests
|
14
|
+
# are not considered to be 'logged in'.
|
15
|
+
# 2. 'Current' User - The currently logged in user is stored in a thread local, and can be accessed anywhere via 'User.current'.
|
16
|
+
# This allows model code to easily record which user is making changes to records, for versioning, etc.
|
17
|
+
#
|
18
|
+
# 3. 'Admin' Access Denied Page - If users try to access a protected controller, they are redirected to the CMS administration Login page
|
19
|
+
# which may be different than the 'front end' user login page. (Cms::Controller handles that differently)
|
20
|
+
#
|
21
|
+
#
|
22
|
+
# To Dos: It appears as though we are storing the 'current' user in two places, @current_user and User.current. This is probably not DRY, but
|
23
|
+
# more testing would be needed.
|
24
|
+
#
|
1
25
|
module Cms
|
2
26
|
module Authentication
|
3
27
|
module Controller
|
@@ -12,6 +36,7 @@ module Cms
|
|
12
36
|
# If the user is not logged in, this will be set to the guest user, which represents a public
|
13
37
|
# user, who will likely have more limited permissions
|
14
38
|
def current_user
|
39
|
+
# Note: We have disabled basic_http_auth
|
15
40
|
@current_user ||= begin
|
16
41
|
User.current = (login_from_session || login_from_cookie || User.guest)
|
17
42
|
end
|
@@ -61,7 +86,7 @@ module Cms
|
|
61
86
|
|
62
87
|
# Redirect as appropriate when an access request fails.
|
63
88
|
#
|
64
|
-
# The default action is to redirect to the login screen.
|
89
|
+
# The default action is to redirect to the BrowserCMS admin login screen.
|
65
90
|
#
|
66
91
|
# Override this method in your controllers if you want to have special
|
67
92
|
# behavior in case the user is not authorized
|
@@ -73,11 +98,6 @@ module Cms
|
|
73
98
|
store_location
|
74
99
|
redirect_to cms_login_path
|
75
100
|
end
|
76
|
-
# format.any doesn't work in rails version < http://dev.rubyonrails.org/changeset/8987
|
77
|
-
# you may want to change format.any to e.g. format.any(:js, :xml)
|
78
|
-
# format.any do
|
79
|
-
# request_http_basic_authentication 'Web Password'
|
80
|
-
# end
|
81
101
|
end
|
82
102
|
end
|
83
103
|
|
@@ -162,7 +182,6 @@ module Cms
|
|
162
182
|
|
163
183
|
# Cookies shouldn't be allowed to persist past their freshness date,
|
164
184
|
# and they should be changed at each login
|
165
|
-
|
166
185
|
def valid_remember_cookie?
|
167
186
|
return nil unless User.current
|
168
187
|
(User.current.remember_token?) &&
|
@@ -118,14 +118,14 @@ module Cms
|
|
118
118
|
|
119
119
|
# Override this method if you would like to override the way the section is set
|
120
120
|
def set_attachment_section
|
121
|
-
if
|
121
|
+
if !attachment_file.blank?
|
122
122
|
attachment.section = Section.root.first
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
126
|
# Override this method if you would like to override the way file_path is set
|
127
127
|
def set_attachment_file_path
|
128
|
-
if
|
128
|
+
if !attachment_file.blank?
|
129
129
|
attachment.file_path = "/attachments/#{File.basename(attachment_file.original_filename).to_s.downcase}"
|
130
130
|
end
|
131
131
|
end
|
@@ -181,4 +181,4 @@ module Cms
|
|
181
181
|
end
|
182
182
|
end
|
183
183
|
end
|
184
|
-
end
|
184
|
+
end
|
@@ -23,7 +23,18 @@ module Cms
|
|
23
23
|
after_save :publish_for_non_versioned
|
24
24
|
|
25
25
|
named_scope :published, :conditions => {:published => true}
|
26
|
-
named_scope :unpublished,
|
26
|
+
named_scope :unpublished, lambda {
|
27
|
+
if versioned?
|
28
|
+
{ :joins => :versions,
|
29
|
+
:conditions =>
|
30
|
+
"#{connection.quote_table_name(version_table_name)}.#{connection.quote_column_name('version')} > " +
|
31
|
+
"#{connection.quote_table_name(table_name)}.#{connection.quote_column_name('version')}",
|
32
|
+
:select => "distinct #{connection.quote_table_name(table_name)}.*" }
|
33
|
+
else
|
34
|
+
{ :conditions => { :published => false } }
|
35
|
+
end
|
36
|
+
}
|
37
|
+
|
27
38
|
end
|
28
39
|
end
|
29
40
|
module ClassMethods
|
@@ -82,7 +82,7 @@ module Cms
|
|
82
82
|
|
83
83
|
end
|
84
84
|
module InstanceMethods
|
85
|
-
def
|
85
|
+
def prepare_to_render(controller)
|
86
86
|
# Give this renderable a reference to the controller
|
87
87
|
@controller = controller
|
88
88
|
|
@@ -90,12 +90,21 @@ module Cms
|
|
90
90
|
|
91
91
|
# This gives the view a reference to this object
|
92
92
|
instance_variable_set(self.class.instance_variable_name_for_view, self)
|
93
|
-
|
93
|
+
|
94
94
|
# This is like a controller action
|
95
95
|
# We will call it if you have defined a render method
|
96
96
|
# but if you haven't we won't
|
97
97
|
render if respond_to?(:render)
|
98
|
+
end
|
98
99
|
|
100
|
+
def perform_render(controller)
|
101
|
+
return "Exception: #{@render_exception}" if @render_exception
|
102
|
+
unless @controller
|
103
|
+
# We haven't prepared to render. This should only happen when logged in, as we don't want
|
104
|
+
# errors to bubble up and prevent the page being edited in that case.
|
105
|
+
prepare_to_render(controller)
|
106
|
+
end
|
107
|
+
|
99
108
|
# Create, Instantiate and Initialize the view
|
100
109
|
view_class = Class.new(ActionView::Base)
|
101
110
|
action_view = view_class.new(@controller.view_paths, {}, @controller)
|
@@ -108,7 +117,7 @@ module Cms
|
|
108
117
|
|
109
118
|
# We want content_for to be called on the controller's view, not this inner view
|
110
119
|
def action_view.content_for(name, content=nil, &block)
|
111
|
-
controller.instance_variable_get("@template").content_for(name, content, &block)
|
120
|
+
@controller.instance_variable_get("@template").content_for(name, content, &block)
|
112
121
|
end
|
113
122
|
|
114
123
|
# Copy instance variables from this renderable object to it's view
|
@@ -122,6 +131,10 @@ module Cms
|
|
122
131
|
end
|
123
132
|
end
|
124
133
|
|
134
|
+
def render_exception=(exception)
|
135
|
+
@render_exception = exception
|
136
|
+
end
|
137
|
+
|
125
138
|
protected
|
126
139
|
def copy_instance_variables_from_controller!
|
127
140
|
if @controller.respond_to?(:instance_variables_for_rendering)
|
@@ -141,4 +154,4 @@ module Cms
|
|
141
154
|
|
142
155
|
end
|
143
156
|
end
|
144
|
-
end
|
157
|
+
end
|
@@ -110,7 +110,7 @@ module Cms
|
|
110
110
|
def save(perform_validations=true)
|
111
111
|
transaction do
|
112
112
|
#logger.info "..... Calling valid?"
|
113
|
-
return false unless valid?
|
113
|
+
return false unless !perform_validations || valid?
|
114
114
|
|
115
115
|
if changed?
|
116
116
|
#logger.info "..... Changes => #{changes.inspect}"
|
@@ -172,7 +172,7 @@ module Cms
|
|
172
172
|
end
|
173
173
|
|
174
174
|
def save!(perform_validations=true)
|
175
|
-
save || raise(ActiveRecord::RecordNotSaved.new(errors.full_messages))
|
175
|
+
save(perform_validations) || raise(ActiveRecord::RecordNotSaved.new(errors.full_messages))
|
176
176
|
end
|
177
177
|
|
178
178
|
def draft
|
data/lib/cms/routes.rb
CHANGED
@@ -119,6 +119,10 @@ module Cms::Routes
|
|
119
119
|
:enable => :put
|
120
120
|
}
|
121
121
|
|
122
|
+
if RAILS_ENV == "test" && File.expand_path(RAILS_ROOT) == File.expand_path(File.dirname(__FILE__) + "/../..")
|
123
|
+
cms.content_blocks :content_block
|
124
|
+
end
|
125
|
+
|
122
126
|
end
|
123
127
|
|
124
128
|
if PageRoute.table_exists?
|