refinerycms-simple_members 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ module Admin
2
+ class MembersController < Admin::BaseController
3
+
4
+ crudify :member,
5
+ :title_attribute => 'first_name', :xhr_paging => true
6
+
7
+ end
8
+ end
@@ -0,0 +1,24 @@
1
+ class MembersController < ApplicationController
2
+
3
+ before_filter :find_all_members
4
+ before_filter :find_page
5
+
6
+ def index
7
+ redirect_to root_url
8
+ end
9
+
10
+ def show
11
+ redirect_to root_url
12
+ end
13
+
14
+ protected
15
+
16
+ def find_all_members
17
+ @members = Member.order('position ASC')
18
+ end
19
+
20
+ def find_page
21
+ @page = Page.where(:link_url => "/members").first
22
+ end
23
+
24
+ end
@@ -0,0 +1,8 @@
1
+ class Member < ActiveRecord::Base
2
+
3
+ acts_as_indexed :fields => [:first_name, :last_name, :email, :unique_identifier]
4
+
5
+ validates :unique_identifier, :presence => true, :uniqueness => true
6
+
7
+ default_scope order(:last_name)
8
+ end
@@ -0,0 +1,28 @@
1
+ <ul>
2
+ <% if Admin::MembersController.searchable? %>
3
+ <li>
4
+ <%= render :partial => "/shared/admin/search",
5
+ :locals => {
6
+ :url => admin_members_path
7
+ } %>
8
+ </li>
9
+ <% end %>
10
+ <li>
11
+ <%= link_to t('.create_new'), new_admin_member_path,
12
+ :class => "add_icon" %>
13
+ </li>
14
+ <% if !searching? and Admin::MembersController.sortable? and Member.count > 1 %>
15
+ <li>
16
+ <%= link_to t('.reorder', :what => "Members"),
17
+ admin_members_path,
18
+ :id => "reorder_action",
19
+ :class => "reorder_icon" %>
20
+
21
+ <%= link_to t('.reorder_done', :what => "Members"),
22
+ admin_members_path,
23
+ :id => "reorder_action_done",
24
+ :style => "display: none;",
25
+ :class => "reorder_icon" %>
26
+ </li>
27
+ <% end %>
28
+ </ul>
@@ -0,0 +1,34 @@
1
+ <%= form_for [:admin, @member] do |f| -%>
2
+ <%= render :partial => "/shared/admin/error_messages", :locals => {
3
+ :object => @member,
4
+ :include_object_name => true
5
+ } %>
6
+
7
+ <div class='field'>
8
+ <%= f.label :first_name -%>
9
+ <%= f.text_field :first_name -%>
10
+ </div>
11
+
12
+ <div class='field'>
13
+ <%= f.label :last_name -%>
14
+ <%= f.text_field :last_name -%>
15
+ </div>
16
+
17
+ <div class='field'>
18
+ <%= f.label :email -%>
19
+ <%= f.text_field :email -%>
20
+ </div>
21
+
22
+ <div class='field'>
23
+ <%= f.label :unique_identifier -%>
24
+ <%= f.text_field :unique_identifier -%>
25
+ </div>
26
+
27
+ <%= render :partial => "/shared/admin/form_actions",
28
+ :locals => {
29
+ :f => f,
30
+ :continue_editing => false,
31
+ :delete_title => t('delete', :scope => 'admin.members.member'),
32
+ :delete_confirmation => t('message', :scope => 'shared.admin.delete', :title => @member.first_name)
33
+ } %>
34
+ <% end -%>
@@ -0,0 +1,15 @@
1
+ <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(member) -%>">
2
+ <span class='title'>
3
+ <%= member.last_name %>, <%= member.first_name %>
4
+ <span class="preview">&nbsp;</span>
5
+ </span>
6
+ <span class='actions'>
7
+ <%= link_to refinery_icon_tag("application_edit.png"), edit_admin_member_path(member),
8
+ :title => t('.edit') %>
9
+ <%= link_to refinery_icon_tag("delete.png"), admin_member_path(member),
10
+ :class => "cancel confirm-delete",
11
+ :title => t('.delete'),
12
+ :confirm => t('message', :scope => 'shared.admin.delete', :title => member.first_name),
13
+ :method => :delete %>
14
+ </span>
15
+ </li>
@@ -0,0 +1,2 @@
1
+ <%= will_paginate @members %>
2
+ <%= render :partial => "sortable_list" %>
@@ -0,0 +1,18 @@
1
+ <% if searching? %>
2
+ <h2><%= t('results_for', :scope => 'shared.admin.search', :query => params[:search]) %></h2>
3
+ <% end %>
4
+ <% if @members.any? %>
5
+ <div class='pagination_container'>
6
+ <%= render :partial => 'members' %>
7
+ </div>
8
+ <% else %>
9
+ <p>
10
+ <% unless searching? %>
11
+ <strong>
12
+ <%= t('.no_items_yet') %>
13
+ </strong>
14
+ <% else %>
15
+ <%= t('no_results', :scope => 'shared.admin.search') %>
16
+ <% end %>
17
+ </p>
18
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <ul id='sortable_list'>
2
+ <%= render :partial => 'member', :collection => @members %>
3
+ </ul>
4
+ <%= render :partial => "/shared/admin/sortable_list",
5
+ :locals => {
6
+ :continue_reordering => (local_assigns.keys.include?(:continue_reordering)) ? continue_reordering : true
7
+ } %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,10 @@
1
+ <section id='records'>
2
+ <%= render :partial => 'records' %>
3
+ </section>
4
+ <aside id='actions'>
5
+ <%= render :partial => 'actions' %>
6
+ </aside>
7
+ <%= render :partial => '/shared/admin/make_sortable',
8
+ :locals => {
9
+ :tree => false
10
+ } if !searching? and Admin::MembersController.sortable? and Member.count > 1 %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,11 @@
1
+ <% content_for :body_content_left do %>
2
+ <ul id="members">
3
+ <% @members.each do |member| %>
4
+ <li>
5
+ <%= link_to member.first_name, member_path(member) %>
6
+ </li>
7
+ <% end %>
8
+ </ul>
9
+ <% end %>
10
+
11
+ <%= render :partial => "/shared/content_page" %>
@@ -0,0 +1,45 @@
1
+ <% content_for :body_content_title do %>
2
+ <%= @member.first_name %>
3
+ <% end %>
4
+
5
+ <% content_for :body_content_left do %>
6
+ <section>
7
+ <h1>First Name</h1>
8
+ <p>
9
+ <%=raw @member.first_name %>
10
+ </p>
11
+ </section>
12
+ <section>
13
+ <h1>Last Name</h1>
14
+ <p>
15
+ <%=raw @member.last_name %>
16
+ </p>
17
+ </section>
18
+ <section>
19
+ <h1>Email</h1>
20
+ <p>
21
+ <%=raw @member.email %>
22
+ </p>
23
+ </section>
24
+ <section>
25
+ <h1>Unique Identifier</h1>
26
+ <p>
27
+ <%=raw @member.unique_identifier %>
28
+ </p>
29
+ </section>
30
+ <% end %>
31
+
32
+ <% content_for :body_content_right do %>
33
+ <aside>
34
+ <h2><%= t('.other') %></h2>
35
+ <ul id="members">
36
+ <% @members.each do |member| %>
37
+ <li>
38
+ <%= link_to member.first_name, member_path(member) %>
39
+ </li>
40
+ <% end %>
41
+ </ul>
42
+ </aside>
43
+ <% end %>
44
+
45
+ <%= render :partial => "/shared/content_page" %>
@@ -0,0 +1,25 @@
1
+ en:
2
+ shared:
3
+ admin:
4
+ image_picker:
5
+ image: image
6
+ plugins:
7
+ members:
8
+ title: Members
9
+ admin:
10
+ members:
11
+ actions:
12
+ create_new: Add New Member
13
+ reorder: Reorder Members
14
+ reorder_done: Done Reordering Members
15
+ records:
16
+ title: Members
17
+ sorry_no_results: Sorry! There are no results found.
18
+ no_items_yet: There are no Members yet. Click "Add New Member" to add your first member.
19
+ member:
20
+ view_live_html: View this member live <br/><em>(opens in a new window)</em>
21
+ edit: Edit this member
22
+ delete: Remove this member forever
23
+ members:
24
+ show:
25
+ other: Other Members
@@ -0,0 +1,25 @@
1
+ fr:
2
+ shared:
3
+ admin:
4
+ image_picker:
5
+ image: image
6
+ plugins:
7
+ members:
8
+ title: Members
9
+ admin:
10
+ members:
11
+ actions:
12
+ create_new: Créer un(e) nouve(au/l/lle) Member
13
+ reorder: Réordonner les Members
14
+ reorder_done: Fin de réordonnancement des Members
15
+ records:
16
+ title: Members
17
+ sorry_no_results: "Désolé ! Aucun résultat."
18
+ no_items_yet: 'Il n''y a actuellement aucun(e) Member. Cliquer sur "Créer un(e) nouve(au/l/lle) Member" pour créer votre premi(er/ère) member.'
19
+ member:
20
+ view_live_html: Voir ce(t/tte) member <br/><em>(Ouvre une nouvelle fenêtre)</em>
21
+ edit: Modifier ce(t/tte) member
22
+ delete: Supprimer définitivement ce(t/tte) member
23
+ members:
24
+ show:
25
+ other: Autres Members
@@ -0,0 +1,25 @@
1
+ lolcat:
2
+ shared:
3
+ admin:
4
+ image_picker:
5
+ image: IMAGE
6
+ plugins:
7
+ members:
8
+ title: Members
9
+ admin:
10
+ members:
11
+ actions:
12
+ create_new: CREATE NEW Member
13
+ reorder: REORDR Members
14
+ reorder_done: DUN REORDERIN Members
15
+ records:
16
+ title: Members
17
+ sorry_no_results: SRY! THAR R NO RESULTS FINDZ.
18
+ no_items_yet: THAR R NO Members YET. CLICK "CREATE NEW Member" 2 ADD UR FURST member.
19
+ member:
20
+ view_live_html: VIEW DIS member LIV <BR/><EM>(OPENS IN NEW WINDOW)</EM>
21
+ edit: EDIT DIS member
22
+ delete: REMOOV DIS member FOREVR
23
+ members:
24
+ show:
25
+ other: OTHR Members
@@ -0,0 +1,21 @@
1
+ nb:
2
+ plugins:
3
+ members:
4
+ title: Members
5
+ admin:
6
+ members:
7
+ actions:
8
+ create_new: Lag en ny Member
9
+ reorder: Endre rekkefølgen på Members
10
+ reorder_done: Ferdig å endre rekkefølgen Members
11
+ records:
12
+ title: Members
13
+ sorry_no_results: Beklager! Vi fant ikke noen resultater.
14
+ no_items_yet: Det er ingen Members enda. Klikk på "Lag en ny Member" for å legge til din første member.
15
+ member:
16
+ view_live_html: Vis hvordan denne member ser ut offentlig <br/><em>(åpner i et nytt vindu)</em>
17
+ edit: Rediger denne member
18
+ delete: Fjern denne member permanent
19
+ members:
20
+ show:
21
+ other: Andre Members
@@ -0,0 +1,21 @@
1
+ nl:
2
+ plugins:
3
+ members:
4
+ title: Members
5
+ admin:
6
+ members:
7
+ actions:
8
+ create_new: Maak een nieuwe Member
9
+ reorder: Wijzig de volgorde van de Members
10
+ reorder_done: Klaar met het wijzingen van de volgorde van de Members
11
+ records:
12
+ title: Members
13
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
14
+ no_items_yet: Er zijn nog geen Members. Druk op 'Maak een nieuwe Member' om de eerste aan te maken.
15
+ member:
16
+ view_live_html: Bekijk deze member op de website <br/><em>(opent een nieuw venster)</em>
17
+ edit: Bewerk deze member
18
+ delete: Verwijder deze member voor eeuwig
19
+ members:
20
+ show:
21
+ other: Andere Members
data/config/routes.rb ADDED
@@ -0,0 +1,11 @@
1
+ ::Refinery::Application.routes.draw do
2
+ resources :members, :only => [:index, :show]
3
+
4
+ scope(:path => 'refinery', :as => 'admin', :module => 'admin') do
5
+ resources :members, :except => :show do
6
+ collection do
7
+ post :update_positions
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ class RefinerycmsSimpleMembers < Refinery::Generators::EngineInstaller
2
+
3
+ source_root File.expand_path('../../../', __FILE__)
4
+ engine_name "simple_members"
5
+
6
+ end
@@ -0,0 +1,36 @@
1
+ module MembersFromCSV
2
+ extend self
3
+
4
+ def populate(file)
5
+ require 'csv'
6
+ CSV.new(file).drop(1).each do |last_name, first_name, unique_identifier|
7
+ add_member_from_csv first_name, last_name, unique_identifier
8
+ end
9
+ end
10
+
11
+ private
12
+
13
+ def add_member_from_csv(first_name, last_name, unique_identifier)
14
+ if unique_identifier.nil?
15
+ return if db_already_has_someone_named? first_name, last_name
16
+ unique_identifier = mock_unique_identifier
17
+ warn_that_we_mocked_unique_identifier_for first_name, last_name, unique_identifier
18
+ end
19
+ Member.create :first_name => first_name, :last_name => last_name, :unique_identifier => unique_identifier
20
+ end
21
+
22
+ def warn_that_we_mocked_unique_identifier_for(first_name, last_name, unique_identifier)
23
+ $stderr.puts "#{first_name}, #{last_name} has been assigned the identifier #{unique_identifier} as theirs is missing from the CSV file.\n"
24
+ end
25
+
26
+ def db_already_has_someone_named?(first_name, last_name)
27
+ Member.where(:first_name => first_name, :last_name => last_name).first
28
+ end
29
+
30
+ def mock_unique_identifier
31
+ (1..Float::INFINITY).find do |potential_identifier|
32
+ !Member.find_by_unique_identifier(potential_identifier)
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,30 @@
1
+ require 'refinerycms-base'
2
+
3
+ module Refinery
4
+ module SimpleMembers
5
+
6
+ class << self
7
+ attr_accessor :root
8
+ def root
9
+ @root ||= Pathname.new(File.expand_path('../../', __FILE__))
10
+ end
11
+ end
12
+
13
+ class Engine < Rails::Engine
14
+ initializer "static assets" do |app|
15
+ app.middleware.insert_after ::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public"
16
+ end
17
+
18
+ config.after_initialize do
19
+ Refinery::Plugin.register do |plugin|
20
+ plugin.name = "members"
21
+ plugin.pathname = root
22
+ plugin.activity = {
23
+ :class => Member,
24
+ :title => 'first_name'
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ namespace :refinery do
2
+ namespace :simple_members do
3
+
4
+ desc 'Populate the database from a CSV file where each line is a member of the format "last_name,first_name,unique_id"'
5
+ task :populate_from_csv => :environment do
6
+ require 'member'
7
+ require 'members_from_csv'
8
+ csv_name = ENV['csv']
9
+ unless csv_name && File.exists?(csv_name)
10
+ raise "Invoke like `$ rake refinery:simple_members:populate_from_csv csv=BlueMaxRoster.csv`\nNOTE: should be relative to dir of Rakefile"
11
+ end
12
+ File.open csv_name, &MembersFromCSV.method(:populate)
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: refinerycms-simple_members
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.4
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Josh Cheek
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-19 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Ruby on Rails Members engine for Refinery CMS
15
+ email:
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/generators/refinerycms_simple_members_generator.rb
21
+ - lib/members_from_csv.rb
22
+ - lib/refinerycms-simple_members.rb
23
+ - lib/tasks/members.rake
24
+ - config/locales/en.yml
25
+ - config/locales/fr.yml
26
+ - config/locales/lolcat.yml
27
+ - config/locales/nb.yml
28
+ - config/locales/nl.yml
29
+ - config/routes.rb
30
+ - app/controllers/admin/members_controller.rb
31
+ - app/controllers/members_controller.rb
32
+ - app/models/member.rb
33
+ - app/views/admin/members/_actions.html.erb
34
+ - app/views/admin/members/_form.html.erb
35
+ - app/views/admin/members/_member.html.erb
36
+ - app/views/admin/members/_members.html.erb
37
+ - app/views/admin/members/_records.html.erb
38
+ - app/views/admin/members/_sortable_list.html.erb
39
+ - app/views/admin/members/edit.html.erb
40
+ - app/views/admin/members/index.html.erb
41
+ - app/views/admin/members/new.html.erb
42
+ - app/views/members/index.html.erb
43
+ - app/views/members/show.html.erb
44
+ homepage:
45
+ licenses: []
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 1.8.10
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Simple list of members that have first/last name, email, and a unique identifier.
68
+ test_files: []