diff --git a/Rakefile b/Rakefile index bc68622..2d5705c 100644 --- a/Rakefile +++ b/Rakefile @@ -16,11 +16,11 @@ unless defined? RADIANT_ROOT end require 'rake' -require 'rake/rdoctask' +require 'rdoc/task' require 'rake/testtask' -rspec_base = File.expand_path(RADIANT_ROOT + '/vendor/plugins/rspec/lib') -$LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base) +# rspec_base = File.expand_path(RADIANT_ROOT + '/vendor/plugins/rspec/lib') +# $LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base) require 'spec/rake/spectask' require 'cucumber' require 'cucumber/rake/task' @@ -101,7 +101,7 @@ namespace :spec do end desc 'Generate documentation for the reader extension.' -Rake::RDocTask.new(:rdoc) do |rdoc| +RDoc::Task.new(:rdoc) do |rdoc| rdoc.rdoc_dir = 'rdoc' rdoc.title = 'ReaderExtension' rdoc.options << '--line-numbers' << '--inline-source' diff --git a/app/controllers/admin/memberships_controller.rb b/app/controllers/admin/memberships_controller.rb index 8cba78e..8a89109 100644 --- a/app/controllers/admin/memberships_controller.rb +++ b/app/controllers/admin/memberships_controller.rb @@ -1,14 +1,12 @@ class Admin::MembershipsController < ApplicationController - before_filter :find_group + before_filter :find_reader_and_group def index redirect_to admin_group_url(@group) end def create - @reader = Reader.find(params[:reader_id]) - raise ActiveRecord::RecordNotFound unless @reader @membership = Membership.find_or_create_by_reader_id_and_group_id(@reader.id, @group.id) respond_to do |format| format.html { @@ -20,7 +18,7 @@ def create end def destroy - @membership = @group.memberships.find(params[:id]) + @membership ||= @group.memberships.find(params[:id]) @reader = @membership.reader @membership.delete if @membership respond_to do |format| @@ -32,11 +30,19 @@ def destroy end end + def toggle + if @membership = Membership.find_by_reader_id_and_group_id(@reader.id, @group.id) + destroy + else + create + end + end + protected - def find_group + def find_reader_and_group @group = Group.find(params[:group_id]) - raise ActiveRecord::RecordNotFound unless @group + @reader = Reader.find(params[:reader_id]) if params[:reader_id] end - + end diff --git a/app/views/admin/groups/show.html.haml b/app/views/admin/groups/show.html.haml index e89af2d..14d7fd3 100644 --- a/app/views/admin/groups/show.html.haml +++ b/app/views/admin/groups/show.html.haml @@ -1,3 +1,4 @@ +- include_javascript 'admin/reader' - include_stylesheet 'admin/reader_group' - body_classes << "reversed" @@ -40,7 +41,7 @@ =t('reader_extension.private_pages').titlecase %ul - page = Page.respond_to?(:homepage) ? Page.homepage : Page.find_by_parent_id(nil) - %div{:id => "page_holder_#{page.id}"} + %li{:id => "page_holder_#{page.id}"} = render :partial => 'admin/permissions/page', :object => page - main.members do @@ -56,7 +57,7 @@ - columns.each do |column| %ul.column - column.each do |reader| - %div{:id => "reader_holder_#{reader.id}"} + %li{:id => "reader_holder_#{reader.id}"} = render :partial => 'admin/memberships/reader', :object => reader - render_region :footer do |footer| diff --git a/app/views/admin/memberships/_reader.html.haml b/app/views/admin/memberships/_reader.html.haml index e75289b..fe4c5c2 100644 --- a/app/views/admin/memberships/_reader.html.haml +++ b/app/views/admin/memberships/_reader.html.haml @@ -1,9 +1,5 @@ - reader ||= @reader - group ||= @group +- cssclass = reader.has_group?(group) ? "fake_checkbox checked" : "fake_checkbox unchecked" -- if membership = group.membership_for(reader) - %li{:class => "fake_checkbox checked", :id => "reader_#{reader.id}"} - = link_to_remote reader.name, :url => admin_group_membership_url(group, membership), :method => 'delete', :loading => "$('reader_#{reader.id}').addClassName('waiting')", :update => "reader_holder_#{reader.id}" -- else - %li{:class => "fake_checkbox unchecked", :id => "reader_#{reader.id}"} - = link_to_remote reader.name, :url => admin_group_memberships_url(group, :reader_id => reader.id), :loading => "$('reader_#{reader.id}').addClassName('waiting')", :update => "reader_holder_#{reader.id}" += link_to reader.name, admin_toggle_group_membership_url(:group_id => group.id, :reader_id => reader.id), {:class => cssclass, :id => "toggle_reader_#{reader.id}"} diff --git a/app/views/admin/messages/index.haml b/app/views/admin/messages/index.haml deleted file mode 100644 index b5868d6..0000000 --- a/app/views/admin/messages/index.haml +++ /dev/null @@ -1,59 +0,0 @@ -- include_stylesheet('admin/reader') -= render_region :top - -#messages_table.outset - %table#messages.index{:cellspacing=>"0", :border=>"0", :cellpadding=>"0"} - %thead - %tr - - render_region :thead do |thead| - - thead.subject_header do - %th.message - = t('reader_extension.subject') - - thead.function_header do - %th.message_function - = t('reader_extension.function') - - thead.groups_header do - %th.message_groups - = t('reader_extension.groups') - - thead.sent_header do - %th.message_sent - = t('reader_extension.delivery_status') - - thead.modify_header do - %th.modify - = t('modify') - - %tbody - - @messages.each do |message| - %tr - - render_region :tbody do |tbody| - - tbody.subject_cell do - %td.name - = link_to message.subject, admin_message_url(message), :class => message.has_function? ? "functional" : "normal" - - tbody.function_cell do - %td.message_function - - if message.administrative? - = t("message_functions.#{message.function}") - - tbody.groups_cell do - %td.message_groups - - if message.groups.any? - = message.groups.map(&:name).to_sentence - - - tbody.sent_cell do - %td.message_sent - %p - - if message.sent_at - = t('reader_extension.last_sent') - = l(message.sent_at, :format => :short) - - else - = t('reader_extension.never_sent') - - tbody.modify_cell do - %td.actions - = link_to( image('delta') + ' ' + t('reader_extension.edit_message'), edit_admin_message_url(message), :class => "action" ) - = link_to( image('minus') + ' ' + t('reader_extension.delete_message'), admin_message_url(message), {:method => :delete, :class => "action", :confirm => t('reader_extension.really_delete_message', :title => message.subject)}) - - - render_region :bottom do |bottom| - - bottom.buttons do - #actions - = pagination_for @messages - %ul - %li= link_to image('plus') + " " + "new message", new_admin_message_url \ No newline at end of file diff --git a/app/views/admin/permissions/_page.html.haml b/app/views/admin/permissions/_page.html.haml index e81a580..afd9d1b 100644 --- a/app/views/admin/permissions/_page.html.haml +++ b/app/views/admin/permissions/_page.html.haml @@ -1,24 +1,18 @@ - page ||= @page - group ||= @group -- liclass = 'loose' -- liclass = 'attached' if page.has_group?(group) -- liclass = 'inherited' if page.group_is_inherited?(group) -- if permission = group.permission_for(page) - %li{:class => "fake_checkbox checked", :id => "page_#{page.id}"} - = link_to_remote page.title, :url => admin_group_permission_url(group, permission), :method => 'delete', :loading => "$('page_#{page.id}').addClassName('waiting')", :update => "page_holder_#{page.id}" - -- elsif page.has_inherited_group?(group) - %li{:class => "fake_checkbox inherited", :id => "page_#{page.id}"} - = page.title +- if page.has_inherited_group?(group) + %span{:class => "fake_checkbox inherited"} + = page.title - else - %li{:class => "fake_checkbox unchecked", :id => "page_#{page.id}"} - = link_to_remote page.title, :url => admin_group_permissions_url(group, :page_id => page.id), :loading => "$('page_#{page.id}').addClassName('waiting')", :update => "page_holder_#{page.id}" + - cssclass = "fake_checkbox" + - cssclass << ' checked' if page.has_group?(group) + = link_to page.title, admin_toggle_group_permission_url(:group_id => group.id, :page_id => page.id), {:class => cssclass, :id => "toggle_page_#{page.id}"} - if page.children.any? %ul - page.children.each do |child| - %div{:id => "page_holder_#{child.id}"} + %li{:id => "page_holder_#{child.id}"} = render :partial => 'admin/permissions/page', :object => child diff --git a/config/routes.rb b/config/routes.rb index d73fa87..84c5255 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,6 +3,8 @@ admin.resources :messages, :member => [:preview, :deliver] admin.resources :groups, :has_many => [:memberships, :permissions, :group_invitations, :messages] admin.resource :reader_configuration, :controller => 'reader_configuration' + admin.toggle_group_membership "memberships/toggle", :controller => 'memberships', :action => 'toggle' + admin.toggle_group_permission "permissions/toggle", :controller => 'permissions', :action => 'toggle' end map.namespace :admin do |admin| diff --git a/lib/grouped_model.rb b/lib/grouped_model.rb index 5ced0e1..7e4abe7 100644 --- a/lib/grouped_model.rb +++ b/lib/grouped_model.rb @@ -104,7 +104,11 @@ def count } named_scope :find_these, lambda { |ids| - { :conditions => ["#{self.table_name}.id IN (#{ids.map{"?"}.join(',')})", *ids] } + if ids.any? + { :conditions => ["#{self.table_name}.id IN (#{ids.map{"?"}.join(',')})", *ids] } + else + {} + end } end diff --git a/lib/radiant-reader-extension.rb b/lib/radiant-reader-extension.rb index 737033b..f418f9e 100644 --- a/lib/radiant-reader-extension.rb +++ b/lib/radiant-reader-extension.rb @@ -1,5 +1,5 @@ module RadiantReaderExtension - VERSION = '3.0.0.rc4' + VERSION = '3.0.0' SUMMARY = %q{Reader/viewer/visitor registration, login and access-control for Radiant CMS} DESCRIPTION = %q{Provides reader/member/user registration and management functions including password-reminder, group-based page access control and administrative email.} URL = "http://radiant.spanner.org/reader" diff --git a/radiant-reader-extension.gemspec b/radiant-reader-extension.gemspec index fdbcbf2..07293ff 100644 --- a/radiant-reader-extension.gemspec +++ b/radiant-reader-extension.gemspec @@ -35,7 +35,8 @@ Gem::Specification.new do |s| config.gem 'radiant-reader-extension', :version => '~> #{RadiantReaderExtension::VERSION}' - and please remember to enable ActionMailer in your project's config/environment.rb. + and if you haven't already, remember to enable ActionMailer in your + project's config/environment.rb. } end \ No newline at end of file diff --git a/reader_extension.rb b/reader_extension.rb index d5daac5..a413e63 100644 --- a/reader_extension.rb +++ b/reader_extension.rb @@ -6,14 +6,6 @@ class ReaderExtension < Radiant::Extension description RadiantReaderExtension::DESCRIPTION url RadiantReaderExtension::URL - extension_config do |config| - config.gem 'authlogic', :version => "~> 2.1.6" - config.gem 'sanitize', :version => "~> 2.0.1" - config.gem 'snail', :version => "~> 0.5.5" - config.gem 'vcard', :version => "~> 0.1.1" - config.gem 'fastercsv', :version => "~> 1.5.4" - end - migrate_from 'Reader Group', 20110214101339 def activate diff --git a/spec/spec.opts b/spec/spec.opts deleted file mode 100644 index e29cb80..0000000 --- a/spec/spec.opts +++ /dev/null @@ -1,5 +0,0 @@ ---colour ---format progress ---format html:spec/spec_report.html ---loadby mtime ---reverse