bcms_person 0.5.0
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/README +9 -0
- data/app/controllers/application_controller.rb +10 -0
- data/app/controllers/cms/people_controller.rb +2 -0
- data/app/controllers/cms/person_categories_controller.rb +2 -0
- data/app/helpers/application_helper.rb +3 -0
- data/app/models/person.rb +25 -0
- data/app/models/person_category.rb +9 -0
- data/app/portlets/helpers/person_list_by_category_portlet_helper.rb +5 -0
- data/app/portlets/person_list_by_category_portlet.rb +13 -0
- data/app/views/cms/people/_form.html.erb +15 -0
- data/app/views/cms/people/render.html.erb +30 -0
- data/app/views/cms/person_categories/_form.html.erb +3 -0
- data/app/views/cms/person_categories/render.html.erb +3 -0
- data/app/views/portlets/person_list_by_category/_form.html.erb +14 -0
- data/app/views/portlets/person_list_by_category/render.html.erb +19 -0
- data/db/migrate/20100416173927_create_people.rb +37 -0
- data/db/migrate/20100416190408_create_person_categories.rb +24 -0
- data/lib/bcms_person.rb +1 -0
- data/lib/bcms_person/routes.rb +8 -0
- data/public/bcms/person/README +1 -0
- data/public/bcms/person/bcms_person.css +46 -0
- data/public/bcms/person/bcms_person.js +15 -0
- data/rails/init.rb +4 -0
- metadata +104 -0
data/README
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
== BrowserCMS Person extension
|
2
|
+
|
3
|
+
This BrowserCMS 3.1 (or greater) extension allows you to create and group lists of people together in an attractive format.
|
4
|
+
|
5
|
+
== Requirements
|
6
|
+
|
7
|
+
* bcms_thumbnail - which should be installed and activated before you attempt to use this extension. bcms_thumbnail requires the ImageMagick command-line utilities (identify and mogrify for example).
|
8
|
+
|
9
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Filters added to this controller apply to all controllers in the application.
|
2
|
+
# Likewise, all the methods added will be available for all controllers.
|
3
|
+
|
4
|
+
class ApplicationController < ActionController::Base
|
5
|
+
helper :all # include all helpers, all the time
|
6
|
+
protect_from_forgery # See ActionController::RequestForgeryProtection for details
|
7
|
+
|
8
|
+
# Scrub sensitive parameters from your log
|
9
|
+
# filter_parameter_logging :password
|
10
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Person < ActiveRecord::Base
|
2
|
+
acts_as_content_block
|
3
|
+
belongs_to_attachment
|
4
|
+
belongs_to :person_category
|
5
|
+
|
6
|
+
validates_presence_of :first_name, :last_name
|
7
|
+
|
8
|
+
def set_attachment_file_path
|
9
|
+
# The default behavior is use /attachments/file.txt for the attachment path,
|
10
|
+
# assuming file.txt was the name of the file the user uploaded
|
11
|
+
# You should override this with your own strategy for setting the attachment path
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_attachment_section
|
16
|
+
# The default behavior is to put all attachments in the root section
|
17
|
+
# Override this method if you would like to change that
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def display_name
|
22
|
+
"#{self.first_name} #{self.last_name}"
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class PersonListByCategoryPortlet < Portlet
|
2
|
+
# Mark this as 'true' to allow the portlet's template to be editable via the CMS admin UI.
|
3
|
+
enable_template_editor false
|
4
|
+
|
5
|
+
def render
|
6
|
+
if self.person_category_id.blank?
|
7
|
+
@people = Person.find(:all, :order => (self.sort_order.blank?) ? 'first_name, last_name' : self.sort_order)
|
8
|
+
else
|
9
|
+
@person_category = PersonCategory.find(self.person_category_id.to_i)
|
10
|
+
@people = Person.find(:all, :conditions => ['person_category_id = ?', self.person_category_id], :order => (self.sort_order.blank?) ? 'first_name, last_name' : self.sort_order)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<%= f.cms_text_field :name, :label => 'Full Name', :instructions => 'This is just to identify the person in the backend.' %>
|
2
|
+
<%= f.cms_text_field :first_name, :instructions => 'Required' %>
|
3
|
+
<%= f.cms_text_field :middle_name %>
|
4
|
+
<%= f.cms_text_field :last_name, :instructions => 'Required' %>
|
5
|
+
<%= f.cms_drop_down :person_category_id, PersonCategory.all(:order => "name").map{|c| [c.name, c.id]}, :prompt => "- Select one -", :label => "Person Category", :instructions => 'Please select what type of person this is. You can add more categories under "Person -> Person Category" in the admin interface.' %>
|
6
|
+
<%= f.cms_text_field :job_title %>
|
7
|
+
<%= f.cms_text_field :phone %>
|
8
|
+
<%= f.cms_text_field :office %>
|
9
|
+
<%= f.cms_text_editor :summary, :instructions => 'Used in compact listings - should probably be 2 to 3 sentences.' %>
|
10
|
+
<%= f.cms_text_editor :description, :instructions => 'The full description of this person. If you enter content here, we\'ll create a toggle that allows visitors to switch between the summary and full description content. Requires jQuery.' %>
|
11
|
+
<%= f.cms_file_field :attachment_file, :label => "Photo", :instructions => 'Upload a cropped jpg, png, or gif of any reasonable size - we\'ll scale it automatically.' %>
|
12
|
+
<%= f.cms_date_picker :start_date %>
|
13
|
+
<%= f.cms_date_picker :end_date %>
|
14
|
+
<%= f.cms_check_box :sticky, :instructions => 'This person should always be at the top of lists.' %>
|
15
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<div class="person person-<%= @content_block.id %>">
|
2
|
+
<div class="person-photo">
|
3
|
+
<% unless @content_block.attachment.blank? %>
|
4
|
+
<%= image_tag(thumbnail(@content_block,'100'), :alt => @content_block.display_name, :class => 'thumbnail-photo') %>
|
5
|
+
<% end %>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<div class="person-meta">
|
9
|
+
<%= (@content_block.phone.blank?) ? '' : %Q|<div class="phone"><span>Phone:</span> #{@content_block.phone}</div>| %>
|
10
|
+
<%= (@content_block.office.blank?) ? '' : %Q|<div class="office"><span>Office:</span> #{@content_block.office}</div>| %>
|
11
|
+
<%= (@content_block.start_date.blank?) ? '' : %Q|<div class="start_date"><span>From:</span> #{@content_block.start_date.month}/#{content_block.start_date.year}</div>| %>
|
12
|
+
<%= (@content_block.end_date.blank?) ? '' : %Q|<div class="end_date"><span>To:</span> #{@content_block.start_date.month}/#{content_block.start_date.year}</div>| %>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div class="person-content">
|
16
|
+
<h2 class="person-name"><%= h @content_block.display_name %><a name="<%= @content_block.display_name.gsub(/[^a-z\d]/i,'-').downcase %>"></a></h2>
|
17
|
+
<%= (@content_block.job_title.blank?) ? '' : "<h3 class=\"person-job-title\">#{h @content_block.job_title}</h3>" %>
|
18
|
+
<div class="summary" id="person-<%= @content_block.id %>-summary"><%= @content_block.summary %></div>
|
19
|
+
<% if ! @content_block.description.blank? %>
|
20
|
+
<div class="description" style="display: none;" id="person-<%= @content_block.id %>-description">
|
21
|
+
<% unless @content_block.attachment.blank? %>
|
22
|
+
<%= image_tag(thumbnail(@content_block,'200'), :alt => @content_block.display_name, :class=>'full-photo') %>
|
23
|
+
<% end %>
|
24
|
+
<%= @content_block.description %>
|
25
|
+
</div>
|
26
|
+
<div class="person-details-toggle"><a href="#" id="person-<%= @content_block.id %>-toggle" class="person-toggle">more »</a></div>
|
27
|
+
<% end %>
|
28
|
+
</div>
|
29
|
+
<div class="clear"></div>
|
30
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= f.cms_text_field :name %>
|
2
|
+
<%= f.cms_text_editor :description, :instructions => 'Appears below the title and above the list of people' %>
|
3
|
+
<%= f.cms_drop_down :person_category_id, PersonCategory.all(:order => "name").map{|c| [c.name, c.id.to_s]}, :prompt => "- All people -", :label => "Person Category", :instructions => 'Display people in this category.' %>
|
4
|
+
<%= f.cms_drop_down :sort_order, [
|
5
|
+
['Last Name','sticky desc, last_name, first_name'],
|
6
|
+
['Last Name reverse','sticky desc, last_name desc, first_name desc'],
|
7
|
+
['First Name','sticky desc, first_name, last_name'],
|
8
|
+
['First name reverse','sticky desc, first_name desc, last_name desc'],
|
9
|
+
['Start date','sticky desc, start_date'],
|
10
|
+
['Start date reverse','sticky desc, start_date desc']
|
11
|
+
], :prompt => '- Choose a sort order -', :instructions => 'The sort order of people in this category.' %>
|
12
|
+
<%= f.cms_template_editor :template %>
|
13
|
+
<%= f.cms_check_box :display_name, :instructions => "Show the name of this portlet in an h2 tag" %>
|
14
|
+
<%= f.cms_text_editor :none_found_message, :instructions => 'Text to display if no people are found.' %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<%
|
2
|
+
require_javascript_include(['jquery','../bcms/person/bcms_person'])
|
3
|
+
require_stylesheet_link(['../bcms/person/bcms_person'])
|
4
|
+
-%>
|
5
|
+
<div class="person-list person-category-<%= (@person_category.blank?) ? 'all' : @person_category.name.gsub(/[^a-z\d]/i,'-').downcase %>">
|
6
|
+
<% if @portlet.display_name %>
|
7
|
+
<h2><%=h @portlet.name %></h2>
|
8
|
+
<% end %>
|
9
|
+
<% unless @portlet.description.blank? %>
|
10
|
+
<div class="description"><%= @portlet.description %></div>
|
11
|
+
<% end %>
|
12
|
+
<% unless @people.blank? %>
|
13
|
+
<% @people.each do |person| %>
|
14
|
+
<%= render_connectable person %>
|
15
|
+
<% end %>
|
16
|
+
<% else %>
|
17
|
+
<%= @portlet.none_found_message %>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class CreatePeople < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_content_table :people do |t|
|
4
|
+
t.string :first_name
|
5
|
+
t.string :middle_name
|
6
|
+
t.string :last_name
|
7
|
+
t.string :job_title
|
8
|
+
t.string :phone
|
9
|
+
t.string :office
|
10
|
+
t.text :summary, :size => (64.kilobytes + 1)
|
11
|
+
t.text :description, :size => (64.kilobytes + 1)
|
12
|
+
t.belongs_to :attachment
|
13
|
+
t.integer :attachment_version
|
14
|
+
t.date :start_date
|
15
|
+
t.date :end_date
|
16
|
+
t.string :type_of_person
|
17
|
+
t.boolean :sticky
|
18
|
+
t.references :person_category
|
19
|
+
end
|
20
|
+
|
21
|
+
add_index :people, :person_category_id
|
22
|
+
add_index :people, :sticky
|
23
|
+
|
24
|
+
unless Section.with_path('/people').exists?
|
25
|
+
Section.create!(:name => "Person", :parent => Section.system.first, :path => '/people', :allow_groups=>:all)
|
26
|
+
end
|
27
|
+
ContentType.create!(:name => "Person", :group_name => "Person")
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.down
|
31
|
+
ContentType.delete_all(['name = ?', 'Person'])
|
32
|
+
CategoryType.all(:conditions => ['name = ?', 'Person']).each(&:destroy)
|
33
|
+
#If you aren't creating a versioned table, be sure to comment this out.
|
34
|
+
drop_table :person_versions
|
35
|
+
drop_table :people
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class CreatePersonCategories < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_content_table :person_categories do |t|
|
4
|
+
t.string :name
|
5
|
+
t.string :description
|
6
|
+
t.integer :position
|
7
|
+
end
|
8
|
+
ContentType.create!(:name => "PersonCategory", :group_name => "Person")
|
9
|
+
['Staff','Board Member','Alumni'].each do |cat|
|
10
|
+
PersonCategory.create(:publish_on_save => true, :name => cat)
|
11
|
+
end
|
12
|
+
[:position].each do|col|
|
13
|
+
add_index :person_categories, col
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.down
|
18
|
+
ContentType.delete_all(['name = ?', 'PersonCategory'])
|
19
|
+
CategoryType.all(:conditions => ['name = ?', 'Person Category']).each(&:destroy)
|
20
|
+
#If you aren't creating a versioned table, be sure to comment this out.
|
21
|
+
drop_table :person_category_versions
|
22
|
+
drop_table :person_categories
|
23
|
+
end
|
24
|
+
end
|
data/lib/bcms_person.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bcms_person/routes'
|
@@ -0,0 +1 @@
|
|
1
|
+
Use this directory to add public files that should copied from the gem into the project.
|
@@ -0,0 +1,46 @@
|
|
1
|
+
.clear{
|
2
|
+
clear: both;
|
3
|
+
}
|
4
|
+
|
5
|
+
.person{
|
6
|
+
margin-bottom: 2em;
|
7
|
+
}
|
8
|
+
|
9
|
+
.person h2{
|
10
|
+
margin-bottom: 5px;
|
11
|
+
}
|
12
|
+
|
13
|
+
.person-photo{
|
14
|
+
float: left;
|
15
|
+
width: 110px;
|
16
|
+
text-align: center;
|
17
|
+
}
|
18
|
+
|
19
|
+
.person-photo img{
|
20
|
+
width: 100px;
|
21
|
+
}
|
22
|
+
|
23
|
+
.person-meta{
|
24
|
+
float: right;
|
25
|
+
text-align: left;
|
26
|
+
margin-left: 10px;
|
27
|
+
margin-bottom: 10px;
|
28
|
+
width: 150px;
|
29
|
+
}
|
30
|
+
|
31
|
+
.person-meta span{
|
32
|
+
font-weight: bold;
|
33
|
+
}
|
34
|
+
|
35
|
+
.person-content{
|
36
|
+
margin-left: 110px;
|
37
|
+
}
|
38
|
+
|
39
|
+
.person-toggle {
|
40
|
+
font-size: 10px;
|
41
|
+
}
|
42
|
+
|
43
|
+
.full-photo{
|
44
|
+
float: right;
|
45
|
+
margin: 0px 0px 10px 10px;
|
46
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
jQuery(document).ready(function(){
|
2
|
+
jQuery('.person-toggle').click(function(e){
|
3
|
+
e.preventDefault();
|
4
|
+
var personId = jQuery(this).attr('id').split('-')[1];
|
5
|
+
if(jQuery('#person-' + personId + '-summary').is(':visible')){
|
6
|
+
jQuery('#person-' + personId + '-summary').hide();
|
7
|
+
jQuery('#person-' + personId + '-description').show();
|
8
|
+
jQuery(this).html('« less');
|
9
|
+
} else {
|
10
|
+
jQuery('#person-' + personId + '-summary').show();
|
11
|
+
jQuery('#person-' + personId + '-description').hide();
|
12
|
+
jQuery(this).html('more »');
|
13
|
+
}
|
14
|
+
});
|
15
|
+
});
|
data/rails/init.rb
ADDED
metadata
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bcms_person
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 11
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 5
|
9
|
+
- 0
|
10
|
+
version: 0.5.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Dan Collis-Puro
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-11-18 00:00:00 -05:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: bcms_thumbnail
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 19
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
- 2
|
34
|
+
version: 1.0.2
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
description:
|
38
|
+
email: dan@collispuro.com
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files:
|
44
|
+
- README
|
45
|
+
files:
|
46
|
+
- app/portlets/helpers/person_list_by_category_portlet_helper.rb
|
47
|
+
- app/portlets/person_list_by_category_portlet.rb
|
48
|
+
- app/helpers/application_helper.rb
|
49
|
+
- app/views/portlets/person_list_by_category/_form.html.erb
|
50
|
+
- app/views/portlets/person_list_by_category/render.html.erb
|
51
|
+
- app/views/cms/people/_form.html.erb
|
52
|
+
- app/views/cms/people/render.html.erb
|
53
|
+
- app/views/cms/person_categories/_form.html.erb
|
54
|
+
- app/views/cms/person_categories/render.html.erb
|
55
|
+
- app/controllers/application_controller.rb
|
56
|
+
- app/controllers/cms/person_categories_controller.rb
|
57
|
+
- app/controllers/cms/people_controller.rb
|
58
|
+
- app/models/person.rb
|
59
|
+
- app/models/person_category.rb
|
60
|
+
- db/migrate/20100416190408_create_person_categories.rb
|
61
|
+
- db/migrate/20100416173927_create_people.rb
|
62
|
+
- lib/bcms_person.rb
|
63
|
+
- lib/bcms_person/routes.rb
|
64
|
+
- rails/init.rb
|
65
|
+
- public/bcms/person/bcms_person.js
|
66
|
+
- public/bcms/person/README
|
67
|
+
- public/bcms/person/bcms_person.css
|
68
|
+
- README
|
69
|
+
has_rdoc: true
|
70
|
+
homepage: http://collispuro.com
|
71
|
+
licenses: []
|
72
|
+
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
hash: 3
|
84
|
+
segments:
|
85
|
+
- 0
|
86
|
+
version: "0"
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
version: "0"
|
96
|
+
requirements: []
|
97
|
+
|
98
|
+
rubyforge_project: bcms_person
|
99
|
+
rubygems_version: 1.3.7
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: A staffer / board member / general person module for BrowserCMS
|
103
|
+
test_files: []
|
104
|
+
|