radiant-reader-extension 3.0.3 → 3.0.4
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/admin/memberships_controller.rb +16 -0
- data/app/models/membership.rb +12 -3
- data/app/models/reader.rb +5 -1
- data/app/views/accounts/edit_profile.html.haml +1 -6
- data/app/views/admin/groups/show.html.haml +2 -6
- data/app/views/admin/memberships/_reader.html.haml +6 -2
- data/app/views/admin/memberships/_role.html.haml +3 -0
- data/app/views/admin/memberships/_role_form.html.haml +5 -0
- data/app/views/admin/permissions/_page.html.haml +1 -1
- data/app/views/groups/show.html.haml +6 -3
- data/app/views/memberships/_membership.html.haml +36 -0
- data/app/views/readers/_list.html.haml +0 -10
- data/app/views/readers/_memberships.html.haml +9 -6
- data/config/locales/en.yml +4 -1
- data/config/routes.rb +6 -6
- data/db/migrate/20110908194602_membership_attributes.rb +11 -0
- data/lib/radiant-reader-extension.rb +1 -1
- data/public/javascripts/admin/reader.js +22 -3
- data/public/stylesheets/sass/admin/reader_group.sass +29 -1
- metadata +8 -4
@@ -38,6 +38,22 @@ class Admin::MembershipsController < ApplicationController
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
def edit
|
42
|
+
@membership = @group.memberships.find(params[:id])
|
43
|
+
respond_to do |format|
|
44
|
+
format.js { render :partial => 'admin/memberships/role_form' }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def update
|
49
|
+
@membership = @group.memberships.find(params[:id])
|
50
|
+
@membership.update_attributes(params[:membership])
|
51
|
+
@membership.save!
|
52
|
+
respond_to do |format|
|
53
|
+
format.js { render :partial => 'admin/memberships/role' }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
41
57
|
protected
|
42
58
|
|
43
59
|
def find_reader_and_group
|
data/app/models/membership.rb
CHANGED
@@ -4,10 +4,19 @@ class Membership < ActiveRecord::Base
|
|
4
4
|
belongs_to :reader
|
5
5
|
|
6
6
|
named_scope :for, lambda { |reader|
|
7
|
-
{
|
8
|
-
|
7
|
+
{ :conditions => ["memberships.reader_id = ?", reader.id] }
|
8
|
+
}
|
9
|
+
|
10
|
+
named_scope :of, lambda { |group|
|
11
|
+
{ :conditions => ["memberships.group_id = ?", group.id] }
|
12
|
+
}
|
13
|
+
|
14
|
+
named_scope :by_reader_name, lambda {
|
15
|
+
{
|
16
|
+
:joins => "INNER JOIN readers on memberships.reader_id = readers.id",
|
17
|
+
:group => "readers.id",
|
18
|
+
:order => "readers.name ASC"
|
9
19
|
}
|
10
20
|
}
|
11
21
|
|
12
22
|
end
|
13
|
-
|
data/app/models/reader.rb
CHANGED
@@ -135,8 +135,12 @@ class Reader < ActiveRecord::Base
|
|
135
135
|
(grouplist & all_groups).any?
|
136
136
|
end
|
137
137
|
|
138
|
+
def membership_of(group)
|
139
|
+
memberships.of(group).first
|
140
|
+
end
|
141
|
+
|
138
142
|
def has_group? (group)
|
139
|
-
|
143
|
+
!!membership_of(group)
|
140
144
|
end
|
141
145
|
alias :is_in? :has_group?
|
142
146
|
|
@@ -2,12 +2,7 @@
|
|
2
2
|
%p
|
3
3
|
= t("reader_extension.hello").titlecase
|
4
4
|
= link_to(@reader.name, reader_url(@reader)) + '.'
|
5
|
-
|
6
|
-
= t('reader_extension.profile_intro_public')
|
7
|
-
- elsif Radiant.config['reader.confine_to_groups?']
|
8
|
-
= t('reader_extension.profile_intro_grouped')
|
9
|
-
- else
|
10
|
-
= t('reader_extension.profile_intro_private')
|
5
|
+
= t("reader_extension.profile_intro_#{Radiant.config['reader.directory_visibility']}")
|
11
6
|
|
12
7
|
- content_for :breadcrumbs do
|
13
8
|
= link_to t('reader_extension.home').titlecase, '/'
|
@@ -50,15 +50,11 @@
|
|
50
50
|
= link_to image('plus') + ' ' + t('reader_extension.add_members'), new_admin_group_group_invitation_url(@group), :class => 'action'
|
51
51
|
%h3
|
52
52
|
=t('reader_extension.group_members').titlecase
|
53
|
-
- readers = Reader.find(:all)
|
54
|
-
- total = readers.count
|
55
|
-
- column_length = (readers.count-1) / 2
|
56
|
-
- columns = [readers[0..column_length], readers[column_length+1..readers.count]]
|
57
|
-
- columns.each do |column|
|
58
53
|
%ul.column
|
59
|
-
-
|
54
|
+
- Reader.all.each do |reader|
|
60
55
|
%li{:id => "reader_holder_#{reader.id}"}
|
61
56
|
= render :partial => 'admin/memberships/reader', :object => reader
|
57
|
+
|
62
58
|
|
63
59
|
- render_region :footer do |footer|
|
64
60
|
- footer.notes do
|
@@ -1,5 +1,9 @@
|
|
1
1
|
- reader ||= @reader
|
2
2
|
- group ||= @group
|
3
|
-
-
|
3
|
+
- membership = reader.membership_of(group)
|
4
|
+
- cssclass = membership ? "fake_checkbox checked" : "fake_checkbox unchecked"
|
4
5
|
|
5
|
-
= link_to reader.name,
|
6
|
+
= link_to reader.name, toggle_admin_membership_url(:group_id => group.id, :reader_id => reader.id), {:class => cssclass, :id => "toggle_reader_#{reader.id}"}
|
7
|
+
- if membership
|
8
|
+
%span.role
|
9
|
+
= render :partial => 'admin/memberships/role', :locals => {:membership => membership, :group => group}
|
@@ -9,7 +9,7 @@
|
|
9
9
|
- else
|
10
10
|
- cssclass = "fake_checkbox"
|
11
11
|
- cssclass << ' checked' if page.has_group?(group)
|
12
|
-
= link_to page.title,
|
12
|
+
= link_to page.title, toggle_admin_permission_url(:group_id => group.id, :page_id => page.id), {:class => cssclass, :id => "toggle_page_#{page.id}"}
|
13
13
|
|
14
14
|
- if page.children.any?
|
15
15
|
%ul
|
@@ -32,9 +32,12 @@
|
|
32
32
|
= t('reader_extension.subgroups', :name => @group.name)
|
33
33
|
= render :partial => 'groups/group', :collection => @group.children
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
- if @group.memberships.any?
|
36
|
+
%h2
|
37
|
+
= t('reader_extension.group_members')
|
38
|
+
%table.readers
|
39
|
+
%tbody
|
40
|
+
= render :partial => 'memberships/membership', :collection => @group.memberships.by_reader_name
|
38
41
|
|
39
42
|
= yield :main
|
40
43
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
- if membership
|
2
|
+
- group = membership.group
|
3
|
+
- reader = membership.reader
|
4
|
+
- if reader
|
5
|
+
%tr.reader
|
6
|
+
- if reader.unshareable?
|
7
|
+
%td{:colspan => 8}
|
8
|
+
= t("reader_extension.listing_denied")
|
9
|
+
- else
|
10
|
+
%td.gravatar
|
11
|
+
= link_to gravatar_for(reader, {:size => 18}, {:class => 'gravatar'}), reader_url(reader), :title => reader.name
|
12
|
+
%td.name
|
13
|
+
%h3
|
14
|
+
= link_to reader.name, reader_url(reader)
|
15
|
+
%td.role
|
16
|
+
%p
|
17
|
+
%span.role
|
18
|
+
= membership.role
|
19
|
+
%td.email
|
20
|
+
%p
|
21
|
+
= mail_to reader.email, nil, :encode => 'hex', :replace_at => " #{t('reader_extension.at')} "
|
22
|
+
|
23
|
+
- [:phone, :mobile].each do |field|
|
24
|
+
- value = reader.send(field)
|
25
|
+
- unless value.blank?
|
26
|
+
%td{:class => field.to_s}
|
27
|
+
%p
|
28
|
+
= value
|
29
|
+
- else
|
30
|
+
%td.missing
|
31
|
+
%p
|
32
|
+
= t("reader_extension.no_#{field}")
|
33
|
+
|
34
|
+
%td.vcard
|
35
|
+
%p
|
36
|
+
= link_to " ", reader_url(reader, :format => :vcard), :class => 'vcard'
|
@@ -4,16 +4,6 @@
|
|
4
4
|
- if readers.respond_to?(:previous_page) && readers.previous_page
|
5
5
|
= pagination_and_summary_for(readers, t('reader_extension.person'))
|
6
6
|
|
7
|
-
- if @display == 'gallery'
|
8
|
-
- if readers.size > 1
|
9
|
-
- cols = 3
|
10
|
-
- columns = readers.in_groups_of((readers.size / cols), false)
|
11
|
-
- else
|
12
|
-
- columns = [readers]
|
13
|
-
- columns.each do |column|
|
14
|
-
%div.column
|
15
|
-
= render :partial => 'readers/mugshot', :collection => column
|
16
|
-
|
17
7
|
- else
|
18
8
|
%table.readers
|
19
9
|
%tbody
|
@@ -1,8 +1,11 @@
|
|
1
1
|
- reader ||= @reader
|
2
|
-
-
|
3
|
-
- if
|
2
|
+
- memberships = reader.memberships
|
3
|
+
- if memberships.any?
|
4
4
|
%ul.groups
|
5
|
-
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
- memberships.each do |membership|
|
6
|
+
- if membership.group.visible_to?(current_reader)
|
7
|
+
%li
|
8
|
+
= link_to_group(membership.group)
|
9
|
+
- if membership.role?
|
10
|
+
%span.role
|
11
|
+
= membership.role
|
data/config/locales/en.yml
CHANGED
@@ -6,6 +6,9 @@ en:
|
|
6
6
|
description: "Description"
|
7
7
|
parent_id: "Subgroup of"
|
8
8
|
homepage_id: "Group home page"
|
9
|
+
membership:
|
10
|
+
role: "Role"
|
11
|
+
admin: "admin?"
|
9
12
|
reader:
|
10
13
|
description: "Biog or remarks"
|
11
14
|
email: "Email address"
|
@@ -140,7 +143,7 @@ en:
|
|
140
143
|
directory: "Directory"
|
141
144
|
edit_profile: "Edit profile"
|
142
145
|
groups: "Your groups"
|
143
|
-
introduction: "Hello %{name}. Welcome back
|
146
|
+
introduction: "Hello %{name}. Welcome back. This page gathers together recent activity, useful links and bits of administration. You can always get back here by clicking on a 'dashboard' link."
|
144
147
|
listing: "Directory listing"
|
145
148
|
messages: "Messages for you"
|
146
149
|
profile: "Your page"
|
data/config/routes.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
ActionController::Routing::Routes.draw do |map|
|
2
|
+
map.namespace :admin do |admin|
|
3
|
+
admin.resources :readers, :except => [:show]
|
4
|
+
end
|
5
|
+
|
2
6
|
map.namespace :admin, :path_prefix => 'admin/readers' do |admin|
|
3
7
|
admin.resources :messages, :member => [:preview, :deliver]
|
4
8
|
admin.resources :groups, :has_many => [:memberships, :permissions, :group_invitations, :messages]
|
9
|
+
admin.resources :memberships, :only => [:edit, :update], :member => [:toggle]
|
10
|
+
admin.resources :permissions, :only => [], :member => [:toggle]
|
5
11
|
admin.resource :reader_configuration, :controller => 'reader_configuration'
|
6
|
-
admin.toggle_group_membership "memberships/toggle", :controller => 'memberships', :action => 'toggle'
|
7
|
-
admin.toggle_group_permission "permissions/toggle", :controller => 'permissions', :action => 'toggle'
|
8
|
-
end
|
9
|
-
|
10
|
-
map.namespace :admin do |admin|
|
11
|
-
admin.resources :readers, :except => [:show]
|
12
12
|
end
|
13
13
|
|
14
14
|
readers_prefix = Radiant.config['reader.profiles_path'] || "directory"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class MembershipAttributes < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :memberships, :role, :string
|
4
|
+
add_column :memberships, :admin, :boolean
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.down
|
8
|
+
remove_column :memberships, :role
|
9
|
+
remove_column :memberships, :admin
|
10
|
+
end
|
11
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module RadiantReaderExtension
|
2
|
-
VERSION = '3.0.
|
2
|
+
VERSION = '3.0.4'
|
3
3
|
SUMMARY = %q{Reader/viewer/visitor registration, login and access-control for Radiant CMS}
|
4
4
|
DESCRIPTION = %q{Provides reader/member/user registration and management functions including password-reminder, group-based page access control and administrative email.}
|
5
5
|
URL = "http://radiant.spanner.org/reader"
|
@@ -13,9 +13,26 @@ Remote.UpdatingLink = Behavior.create(Remote.Base, {
|
|
13
13
|
onclick : function() {
|
14
14
|
var self = this;
|
15
15
|
var options = Object.extend({
|
16
|
-
url :
|
16
|
+
url : self.element.href,
|
17
17
|
method : 'get',
|
18
|
-
update:
|
18
|
+
update: self.element.up(),
|
19
|
+
onLoading: function () { self.element.addClassName('waiting'); },
|
20
|
+
onComplete: function () { self.element.removeClassName('waiting'); },
|
21
|
+
onSuccess: function () { Event.addBehavior.reload(); },
|
22
|
+
onFailure: function () { self.element.addClassName('failed'); }
|
23
|
+
}, self.options);
|
24
|
+
return self._makeRequest(options);
|
25
|
+
}
|
26
|
+
});
|
27
|
+
|
28
|
+
Remote.UpdatingForm = Behavior.create(Remote.Base, {
|
29
|
+
onsubmit : function() {
|
30
|
+
var self = this;
|
31
|
+
var options = Object.extend({
|
32
|
+
url : self.element.action,
|
33
|
+
method : self.element.method || 'get',
|
34
|
+
parameters : self.element.serialize(),
|
35
|
+
update: self.element.up(),
|
19
36
|
onLoading: function () { self.element.addClassName('waiting'); },
|
20
37
|
onComplete: function () { self.element.removeClassName('waiting'); },
|
21
38
|
onSuccess: function () { Event.addBehavior.reload(); },
|
@@ -28,5 +45,7 @@ Remote.UpdatingLink = Behavior.create(Remote.Base, {
|
|
28
45
|
Event.addBehavior({
|
29
46
|
'div.radio_group': Toggle.RadioGroupBehavior(),
|
30
47
|
'input.select_all': Toggle.SelectAllBehavior(),
|
31
|
-
'a.fake_checkbox': Remote.UpdatingLink()
|
48
|
+
'a.fake_checkbox': Remote.UpdatingLink(),
|
49
|
+
'a.inplace': Remote.UpdatingLink(),
|
50
|
+
'form.inplace': Remote.UpdatingForm()
|
32
51
|
});
|
@@ -91,15 +91,42 @@
|
|
91
91
|
|
92
92
|
#group_pages ul
|
93
93
|
padding-left: 20px
|
94
|
+
li
|
95
|
+
clear: left
|
94
96
|
|
95
97
|
#group_people ul
|
96
98
|
padding-left: 0
|
97
99
|
li
|
100
|
+
clear: left
|
98
101
|
font-size: 16px
|
102
|
+
line-height: 1.6
|
99
103
|
list-style: none
|
100
|
-
line-height: 24px
|
101
104
|
margin-top: 2px
|
102
105
|
font-family: 'Lucida Grande'
|
106
|
+
.role
|
107
|
+
display: block
|
108
|
+
float: left
|
109
|
+
font-weight: normal
|
110
|
+
margin-left: 0.5em
|
111
|
+
a
|
112
|
+
color: #999
|
113
|
+
text-decoration: none
|
114
|
+
background-repeat: no-repeat
|
115
|
+
background-position: 0 3px
|
116
|
+
font-size: 60%
|
117
|
+
vertical-align: text-bottom
|
118
|
+
&.waiting
|
119
|
+
color: #8c8d8e
|
120
|
+
padding-left: 20px
|
121
|
+
background-image: url(/images/admin/spinner.gif)
|
122
|
+
form
|
123
|
+
font-size: 60%
|
124
|
+
input.minibox
|
125
|
+
width: 60px
|
126
|
+
color: #666
|
127
|
+
input, label
|
128
|
+
float: left
|
129
|
+
vertical-align: text-bottom
|
103
130
|
|
104
131
|
#group_pages ul li
|
105
132
|
font-size: 16px
|
@@ -125,6 +152,7 @@
|
|
125
152
|
|
126
153
|
.fake_checkbox
|
127
154
|
display: block
|
155
|
+
float: left
|
128
156
|
padding-left: 20px
|
129
157
|
cursor: pointer
|
130
158
|
background-repeat: no-repeat
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: radiant-reader-extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 3.0.
|
9
|
+
- 4
|
10
|
+
version: 3.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- William Ross
|
@@ -208,6 +208,8 @@ files:
|
|
208
208
|
- app/views/admin/groups/remove.html.haml
|
209
209
|
- app/views/admin/groups/show.html.haml
|
210
210
|
- app/views/admin/memberships/_reader.html.haml
|
211
|
+
- app/views/admin/memberships/_role.html.haml
|
212
|
+
- app/views/admin/memberships/_role_form.html.haml
|
211
213
|
- app/views/admin/messages/_form.html.haml
|
212
214
|
- app/views/admin/messages/_help.html.haml
|
213
215
|
- app/views/admin/messages/_list_function.haml
|
@@ -240,6 +242,7 @@ files:
|
|
240
242
|
- app/views/groups/_group.html.haml
|
241
243
|
- app/views/groups/index.html.haml
|
242
244
|
- app/views/groups/show.html.haml
|
245
|
+
- app/views/memberships/_membership.html.haml
|
243
246
|
- app/views/messages/preview.html.haml
|
244
247
|
- app/views/messages/show.html.haml
|
245
248
|
- app/views/password_resets/create.html.haml
|
@@ -295,6 +298,7 @@ files:
|
|
295
298
|
- db/migrate/20110812111934_groups_nested_set.rb
|
296
299
|
- db/migrate/20110814070858_message_has_many_groups.rb
|
297
300
|
- db/migrate/20110905194602_group_ancestry.rb
|
301
|
+
- db/migrate/20110908194602_membership_attributes.rb
|
298
302
|
- lib/controller_extensions.rb
|
299
303
|
- lib/group_tags.rb
|
300
304
|
- lib/grouped_model.rb
|
@@ -349,7 +353,7 @@ has_rdoc: true
|
|
349
353
|
homepage: http://radiant.spanner.org/reader
|
350
354
|
licenses: []
|
351
355
|
|
352
|
-
post_install_message: "\n Add this to your radiant project with:\n\n config.gem 'radiant-reader-extension', :version => '~> 3.0.
|
356
|
+
post_install_message: "\n Add this to your radiant project with:\n\n config.gem 'radiant-reader-extension', :version => '~> 3.0.4'\n\n and if you haven't already, remember to enable ActionMailer in your\n project's config/environment.rb.\n "
|
353
357
|
rdoc_options: []
|
354
358
|
|
355
359
|
require_paths:
|