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?
         
     |