phcdevworks_members 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +34 -0
- data/Rakefile +32 -0
- data/app/assets/config/phcdevworks_members_manifest.js +2 -0
- data/app/assets/javascripts/phcdevworks_members/application.js +2 -0
- data/app/assets/javascripts/phcdevworks_members/directory/categories.coffee +3 -0
- data/app/assets/javascripts/phcdevworks_members/info/dashboard.coffee +3 -0
- data/app/assets/javascripts/phcdevworks_members/member/addresses.coffee +3 -0
- data/app/assets/javascripts/phcdevworks_members/member/listings.coffee +3 -0
- data/app/assets/javascripts/phcdevworks_members/member/profiles.coffee +3 -0
- data/app/assets/stylesheets/phcdevworks_members/application.scss +2 -0
- data/app/assets/stylesheets/phcdevworks_members/directory/categories.scss +3 -0
- data/app/assets/stylesheets/phcdevworks_members/info/dashboard.scss +3 -0
- data/app/assets/stylesheets/phcdevworks_members/member/addresses.scss +3 -0
- data/app/assets/stylesheets/phcdevworks_members/member/listings.scss +3 -0
- data/app/assets/stylesheets/phcdevworks_members/member/profiles.scss +3 -0
- data/app/controllers/phcdevworks_members/api/v1/categories_controller.rb +15 -0
- data/app/controllers/phcdevworks_members/api/v1/listings_controller.rb +17 -0
- data/app/controllers/phcdevworks_members/application_controller.rb +13 -0
- data/app/controllers/phcdevworks_members/directory/categories_controller.rb +86 -0
- data/app/controllers/phcdevworks_members/info/dashboard_controller.rb +19 -0
- data/app/controllers/phcdevworks_members/member/addresses_controller.rb +94 -0
- data/app/controllers/phcdevworks_members/member/listings_controller.rb +94 -0
- data/app/controllers/phcdevworks_members/member/profiles_controller.rb +87 -0
- data/app/helpers/phcdevworks_members/application_helper.rb +4 -0
- data/app/helpers/phcdevworks_members/directory/categories_helper.rb +4 -0
- data/app/helpers/phcdevworks_members/info/dashboard_helper.rb +4 -0
- data/app/helpers/phcdevworks_members/member/addresses_helper.rb +4 -0
- data/app/helpers/phcdevworks_members/member/listings_helper.rb +4 -0
- data/app/helpers/phcdevworks_members/member/profiles_helper.rb +4 -0
- data/app/jobs/phcdevworks_members/application_job.rb +4 -0
- data/app/mailers/phcdevworks_members/application_mailer.rb +6 -0
- data/app/models/phcdevworks_members/address_versions.rb +5 -0
- data/app/models/phcdevworks_members/application_record.rb +5 -0
- data/app/models/phcdevworks_members/category_versions.rb +5 -0
- data/app/models/phcdevworks_members/directory.rb +7 -0
- data/app/models/phcdevworks_members/directory/category.rb +21 -0
- data/app/models/phcdevworks_members/listing_versions.rb +5 -0
- data/app/models/phcdevworks_members/member.rb +7 -0
- data/app/models/phcdevworks_members/member/address.rb +39 -0
- data/app/models/phcdevworks_members/member/listing.rb +58 -0
- data/app/models/phcdevworks_members/member/profile.rb +46 -0
- data/app/models/phcdevworks_members/profile_versions.rb +5 -0
- data/app/views/layouts/phcdevworks_members/application.html.erb +79 -0
- data/app/views/layouts/phcdevworks_members/components/backend/footer/_footer.html.erb +16 -0
- data/app/views/layouts/phcdevworks_members/components/backend/navigation/_top_menu.html.erb +37 -0
- data/app/views/layouts/phcdevworks_members/components/backend/sidebars/_side_menu.html.erb +189 -0
- data/app/views/layouts/phcdevworks_members/mailer.html.erb +11 -0
- data/app/views/layouts/phcdevworks_members/mailer.text.erb +1 -0
- data/app/views/layouts/phcdevworks_members/member_profile.html.erb +78 -0
- data/app/views/phcdevworks_members/api/v1/categories/index.json.rabl +2 -0
- data/app/views/phcdevworks_members/api/v1/listings/index.json.rabl +2 -0
- data/app/views/phcdevworks_members/directory/categories/_form.html.erb +22 -0
- data/app/views/phcdevworks_members/directory/categories/components/_category_audits.html.erb +25 -0
- data/app/views/phcdevworks_members/directory/categories/components/_category_list.html.erb +15 -0
- data/app/views/phcdevworks_members/directory/categories/components/_category_main.html.erb +31 -0
- data/app/views/phcdevworks_members/directory/categories/components/_category_sidebar.html.erb +16 -0
- data/app/views/phcdevworks_members/directory/categories/edit.html.erb +37 -0
- data/app/views/phcdevworks_members/directory/categories/index.html.erb +52 -0
- data/app/views/phcdevworks_members/directory/categories/new.html.erb +37 -0
- data/app/views/phcdevworks_members/directory/categories/show.html.erb +30 -0
- data/app/views/phcdevworks_members/info/dashboard/index.html.erb +54 -0
- data/app/views/phcdevworks_members/member/addresses/_form.html.erb +46 -0
- data/app/views/phcdevworks_members/member/addresses/components/_address_audits_table.html.erb +15 -0
- data/app/views/phcdevworks_members/member/addresses/components/_address_main.html.erb +17 -0
- data/app/views/phcdevworks_members/member/addresses/edit.html.erb +37 -0
- data/app/views/phcdevworks_members/member/addresses/index.html.erb +75 -0
- data/app/views/phcdevworks_members/member/addresses/new.html.erb +37 -0
- data/app/views/phcdevworks_members/member/addresses/show.html.erb +65 -0
- data/app/views/phcdevworks_members/member/dashboards/index.html.erb +54 -0
- data/app/views/phcdevworks_members/member/listings/_form.html.erb +68 -0
- data/app/views/phcdevworks_members/member/listings/components/_listing_audits_table.html.erb +15 -0
- data/app/views/phcdevworks_members/member/listings/components/_listing_main.html.erb +22 -0
- data/app/views/phcdevworks_members/member/listings/edit.html.erb +37 -0
- data/app/views/phcdevworks_members/member/listings/index.html.erb +77 -0
- data/app/views/phcdevworks_members/member/listings/new.html.erb +37 -0
- data/app/views/phcdevworks_members/member/listings/show.html.erb +65 -0
- data/app/views/phcdevworks_members/member/profiles/_form.html.erb +42 -0
- data/app/views/phcdevworks_members/member/profiles/components/_profile_addresses_table.html.erb +24 -0
- data/app/views/phcdevworks_members/member/profiles/components/_profile_audits_table.html.erb +15 -0
- data/app/views/phcdevworks_members/member/profiles/components/_profile_header.html.erb +31 -0
- data/app/views/phcdevworks_members/member/profiles/components/_profile_information_table.html.erb +27 -0
- data/app/views/phcdevworks_members/member/profiles/components/_profile_listings_table.html.erb +24 -0
- data/app/views/phcdevworks_members/member/profiles/edit.html.erb +37 -0
- data/app/views/phcdevworks_members/member/profiles/index.html.erb +72 -0
- data/app/views/phcdevworks_members/member/profiles/new.html.erb +37 -0
- data/app/views/phcdevworks_members/member/profiles/show.html.erb +102 -0
- data/config/initializers/friendly_id.rb +107 -0
- data/config/routes.rb +31 -0
- data/db/migrate/20170509002355_create_phcdevworks_members_friendly_id_slugs.rb +20 -0
- data/db/migrate/20170517064030_create_phcdevworks_members_profile_versions.rb +19 -0
- data/db/migrate/20170517064049_create_phcdevworks_members_listing_versions.rb +19 -0
- data/db/migrate/20170517064114_create_phcdevworks_members_address_versions.rb +19 -0
- data/db/migrate/20170517064427_create_phcdevworks_members_category_versions.rb +19 -0
- data/db/migrate/20190317215659_create_join_table_categories_listings.rb +10 -0
- data/db/migrate/20190728233154_create_phcdevworks_members_member_addresses.rb +23 -0
- data/db/migrate/20190729233450_create_phcdevworks_members_member_listings.rb +29 -0
- data/db/migrate/20190729235705_create_phcdevworks_members_member_profiles.rb +20 -0
- data/db/migrate/20190730101344_create_phcdevworks_members_directory_categories.rb +15 -0
- data/lib/phcdevworks_members.rb +5 -0
- data/lib/phcdevworks_members/engine.rb +33 -0
- data/lib/phcdevworks_members/version.rb +3 -0
- data/lib/tasks/phcdevworks_members_tasks.rake +4 -0
- metadata +306 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
<!-- Form - Member - Profile -->
|
2
|
+
<%= form_with(model: @member_profile, local: true) do |form| %>
|
3
|
+
|
4
|
+
<!-- PHCNotifi Render Validation -->
|
5
|
+
<%= render 'phcdevworks_notifications/bootstrap/validations', :object => @member_profile %>
|
6
|
+
<!-- PHCNotifi Render Validation -->
|
7
|
+
|
8
|
+
<!-- Form Input Fields -->
|
9
|
+
<div class="form-group field_with_errors">
|
10
|
+
<%= form.label :member_profile_first_name, "First Name*" %>
|
11
|
+
<%= form.text_field :member_profile_first_name, class: 'form-control', placeholder: 'First Name' %>
|
12
|
+
</div>
|
13
|
+
<div class="form-group field_with_errors">
|
14
|
+
<%= form.label :member_profile_last_name, "Last Name*" %>
|
15
|
+
<%= form.text_field :member_profile_last_name, class: 'form-control', placeholder: 'Last Name' %>
|
16
|
+
</div>
|
17
|
+
<div class="form-group field_with_errors">
|
18
|
+
<%= form.label :member_profile_title, "Job Title" %>
|
19
|
+
<%= form.text_field :member_profile_title, class: 'form-control', placeholder: 'Job Title/Salutation' %>
|
20
|
+
</div>
|
21
|
+
<div class="form-group field_with_errors">
|
22
|
+
<%= form.label :member_profile_email, "Contact Email Address*" %>
|
23
|
+
<%= form.text_field :member_profile_email, class: 'form-control', placeholder: 'Contact Email (Will Remain Private)' %>
|
24
|
+
</div>
|
25
|
+
<div class="form-group field_with_errors">
|
26
|
+
<%= form.label :member_profile_phone, "Contact Phone Number*" %>
|
27
|
+
<%= form.text_field :member_profile_phone, class: 'form-control masked', placeholder: 'Contact Phone Number (Will Remain Private)', data: {format: '(999) 999-9999', placeholder: 'x'} %>
|
28
|
+
</div>
|
29
|
+
<div class="form-group field_with_errors">
|
30
|
+
<%= form.label :member_profile_notes, "Member" %>
|
31
|
+
<%= form.text_area :member_profile_notes, class: 'form-control masked', placeholder: 'Member Notes' %>
|
32
|
+
</div>
|
33
|
+
<!-- Form Input Fields -->
|
34
|
+
|
35
|
+
<!-- Form Submition Button -->
|
36
|
+
<div class="actions">
|
37
|
+
<%= form.submit class: "btn btn-primary btn-md" %>
|
38
|
+
</div>
|
39
|
+
<!-- For Submition Button -->
|
40
|
+
|
41
|
+
<% end %>
|
42
|
+
<!-- Form - Member - Profile -->
|
data/app/views/phcdevworks_members/member/profiles/components/_profile_addresses_table.html.erb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
<div class="table-responsive">
|
2
|
+
<table class="table table-striped table-bordered table-hover">
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th>Address Line 1</th>
|
6
|
+
<th>City</th>
|
7
|
+
<th>Province</th>
|
8
|
+
<th>Type</th>
|
9
|
+
</tr>
|
10
|
+
</thead>
|
11
|
+
<tbody>
|
12
|
+
<% @member_profile.addresses.each do |members_main_address| %>
|
13
|
+
<tr>
|
14
|
+
<td><%= members_main_address.member_address_line_1 %></td>
|
15
|
+
<td><%= members_main_address.member_address_city %></td>
|
16
|
+
<td><%= members_main_address.member_address_province %></td>
|
17
|
+
<td><%= members_main_address.member_address_type %></td>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
</tbody>
|
21
|
+
</table>
|
22
|
+
<%= link_to "See All of " + @member_profile.member_profile_first_name + " " + @member_profile.member_profile_last_name + " Addresses", phcdevworks_members.member_profile_addresses_path(@member_profile), class: "btn btn-primary btn-xs" %>
|
23
|
+
<%= link_to "Add a New Address for " + @member_profile.member_profile_first_name + " " + @member_profile.member_profile_last_name, phcdevworks_members.new_member_profile_address_path(@member_profile), class: "btn btn-purple btn-xs" %>
|
24
|
+
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div class="table-responsive">
|
2
|
+
<table class="table table-striped table-bordered table-hover">
|
3
|
+
<tbody>
|
4
|
+
<% @member_profile_versions.each do |member_profile_version| %>
|
5
|
+
<tr>
|
6
|
+
<td><span class="label label-primary"><%= member_profile_version.event.humanize %></span></td>
|
7
|
+
<td><small>PROFILE EVENT ID#<%= member_profile_version.id %></small></td>
|
8
|
+
<td><%= member_profile_version.event.humanize + ' ' + @member_profile.member_profile_first_name + ' ' + @member_profile.member_profile_last_name %> Profile Information</td>
|
9
|
+
<td><%= member_profile_version.whodunnit %></td>
|
10
|
+
<td><%= l(member_profile_version.created_at, format: "%-d/%m/%Y") %> - <%= l(member_profile_version.created_at, format: "%H:%M %Z") %></td>
|
11
|
+
</tr>
|
12
|
+
<% end %>
|
13
|
+
</tbody>
|
14
|
+
</table>
|
15
|
+
</div>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<div class="profile-header">
|
2
|
+
|
3
|
+
<!-- Member Profiles - Header - Cover -->
|
4
|
+
<div class="profile-header-cover"></div>
|
5
|
+
<!-- Member Profiles - Header - Cover -->
|
6
|
+
|
7
|
+
<!-- Member Profiles - Header - Content -->
|
8
|
+
<div class="profile-header-content">
|
9
|
+
<div class="profile-header-img">
|
10
|
+
<%= image_tag @member_profile.gravatar_url :secure => true, :filetype => :png, :size => 128 %>
|
11
|
+
</div>
|
12
|
+
<div class="profile-header-info">
|
13
|
+
<h4 class="m-t-10 m-b-5"><%= @member_profile.member_profile_first_name + ' ' + @member_profile.member_profile_last_name %></h4>
|
14
|
+
<p class="m-b-10"><%= @member_profile.member_profile_phone %></p>
|
15
|
+
<%= link_to edit_member_profile_path(@member_profile), class: "btn btn-xs btn-yellow" do %>
|
16
|
+
<i class="far fa-pencil-alt"></i> Update Member Information
|
17
|
+
<% end %>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
<!-- Member Profiles - Header - Content -->
|
21
|
+
|
22
|
+
<!-- Member Profiles - Header - Tab Bar -->
|
23
|
+
<ul class="profile-header-tab nav nav-tabs">
|
24
|
+
<li class="nav-item"><a href="#profile-information" class="nav-link" data-toggle="tab">MEMBER INFORMATION</a></li>
|
25
|
+
<li class="nav-item"><a href="#profile-addresses" class="nav-link" data-toggle="tab">MEMBER ADDRESSES</a></li>
|
26
|
+
<li class="nav-item"><a href="#profile-listings" class="nav-link" data-toggle="tab">MEMBER LISTINGS</a></li>
|
27
|
+
<li class="nav-item"><a href="#profile-logs" class="nav-link" data-toggle="tab">MEMBER CHANGE LOG</a></li>
|
28
|
+
</ul>
|
29
|
+
<!-- Member Profiles - Header - Tab Bar -->
|
30
|
+
|
31
|
+
</div>
|
data/app/views/phcdevworks_members/member/profiles/components/_profile_information_table.html.erb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
<div class="table-responsive">
|
2
|
+
<table class="table table-striped table-bordered table-hover">
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th>First Name</th>
|
6
|
+
<th>Last Name</th>
|
7
|
+
<th>Title</th>
|
8
|
+
<th>Email</th>
|
9
|
+
<th>Phone</th>
|
10
|
+
</tr>
|
11
|
+
</thead>
|
12
|
+
<tbody>
|
13
|
+
<tr>
|
14
|
+
<td><%= @member_profile.member_profile_first_name %></td>
|
15
|
+
<td><%= @member_profile.member_profile_last_name %></td>
|
16
|
+
<td><%= @member_profile.member_profile_title %></td>
|
17
|
+
<td><%= @member_profile.member_profile_email %></td>
|
18
|
+
<td><%= @member_profile.member_profile_phone %></td>
|
19
|
+
</tr>
|
20
|
+
<tr>
|
21
|
+
<td><strong>Notes:</strong></td>
|
22
|
+
<td colspan="4"><%= @member_profile.member_profile_notes %></td>
|
23
|
+
</tr>
|
24
|
+
</tbody>
|
25
|
+
</table>
|
26
|
+
<%= link_to "Update " + @member_profile.member_profile_first_name + " " + @member_profile.member_profile_last_name + " Information", phcdevworks_members.edit_member_profile_path(@member_profile), class: "btn btn-primary btn-xs" %>
|
27
|
+
</div>
|
data/app/views/phcdevworks_members/member/profiles/components/_profile_listings_table.html.erb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
<div class="table-responsive">
|
2
|
+
<table class="table table-striped table-bordered table-hover">
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th>Company Name</th>
|
6
|
+
<th>Conact Name</th>
|
7
|
+
<th>City</th>
|
8
|
+
<th>Business Phone</th>
|
9
|
+
</tr>
|
10
|
+
</thead>
|
11
|
+
<tbody>
|
12
|
+
<% @member_profile.listings.each do |member_profile_listing| %>
|
13
|
+
<tr>
|
14
|
+
<td><%= member_profile_listing.listing_company_name %></td>
|
15
|
+
<td><%= member_profile_listing.listing_contact_name %></td>
|
16
|
+
<td><%= member_profile_listing.listing_city %></td>
|
17
|
+
<td><%= member_profile_listing.listing_phone %></td>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
</tbody>
|
21
|
+
</table>
|
22
|
+
<%= link_to "See All of " + @member_profile.member_profile_first_name + " " + @member_profile.member_profile_last_name + " Listings", phcdevworks_members.member_profile_listings_path(@member_profile), class: "btn btn-primary btn-xs" %>
|
23
|
+
<%= link_to "Add a New Listing for " + @member_profile.member_profile_first_name + " " + @member_profile.member_profile_last_name, phcdevworks_members.new_member_profile_listing_path(@member_profile), class: "btn btn-purple btn-xs" %>
|
24
|
+
</div>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<!-- Title System -->
|
2
|
+
<% phc_title "Members Manager" %>
|
3
|
+
<% phc_title_tagline "Update Member Information for " + @member_profile.member_profile_first_name + " " + @member_profile.member_profile_last_name %>
|
4
|
+
<% phc_breadcrumb_one link_to "Dashboard", phcdevworks_members.dashboard_path %>
|
5
|
+
<% phc_breadcrumb_two link_to "Member Profiles", phcdevworks_members.member_profiles_path %>
|
6
|
+
<% phc_breadcrumb_three yield(:phc_title_tagline) %>
|
7
|
+
<!-- Title System -->
|
8
|
+
|
9
|
+
<!-- Page Bradcrumbs -->
|
10
|
+
<ol class="breadcrumb pull-right">
|
11
|
+
<li class="breadcrumb-item"><%= yield(:phc_breadcrumb_one) %></li>
|
12
|
+
<li class="breadcrumb-item"><%= yield(:phc_breadcrumb_two) %></li>
|
13
|
+
<li class="breadcrumb-item active"><%= yield(:phc_breadcrumb_three) %></li>
|
14
|
+
</ol>
|
15
|
+
<!-- Page Bradcrumbs -->
|
16
|
+
|
17
|
+
<!-- Page Header -->
|
18
|
+
<h1 class="page-header"><%= yield(:phc_title) %></h1>
|
19
|
+
<!-- Page Header -->
|
20
|
+
|
21
|
+
<!-- Page Content -->
|
22
|
+
<div class="panel panel-inverse">
|
23
|
+
<div class="panel-heading">
|
24
|
+
<div class="panel-heading-btn">
|
25
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-default" data-click="panel-expand"><i class="fa fa-expand"></i></a>
|
26
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-success" data-click="panel-reload"><i class="fa fa-redo"></i></a>
|
27
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-warning" data-click="panel-collapse"><i class="fa fa-minus"></i></a>
|
28
|
+
</div>
|
29
|
+
<h4 class="panel-title"><%= yield(:phc_title) %></h4>
|
30
|
+
</div>
|
31
|
+
<div class="panel-body">
|
32
|
+
<!-- Form to Edit Member Profiles -->
|
33
|
+
<%= render 'form', member_profile: @member_profile %>
|
34
|
+
<!-- Form to Edit Member Profiles -->
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<!-- Page Content -->
|
@@ -0,0 +1,72 @@
|
|
1
|
+
<!-- Title System -->
|
2
|
+
<% phc_title "Members Manager" %>
|
3
|
+
<% phc_title_tagline "Members List" %>
|
4
|
+
<% phc_breadcrumb_one link_to "Dashboard", phcdevworks_members.dashboard_path %>
|
5
|
+
<% phc_breadcrumb_two yield(:phc_title_tagline) %>
|
6
|
+
<!-- Title System -->
|
7
|
+
|
8
|
+
<!-- Page Bradcrumbs -->
|
9
|
+
<ol class="breadcrumb pull-right">
|
10
|
+
<li class="breadcrumb-item"><%= yield(:phc_breadcrumb_one) %></li>
|
11
|
+
<li class="breadcrumb-item active"><%= yield(:phc_breadcrumb_two) %></li>
|
12
|
+
</ol>
|
13
|
+
<!-- Page Bradcrumbs -->
|
14
|
+
|
15
|
+
<!-- Page Header -->
|
16
|
+
<h1 class="page-header"><%= yield(:phc_title) %></h1>
|
17
|
+
<!-- Page Header -->
|
18
|
+
|
19
|
+
<!-- Page & Panel Content -->
|
20
|
+
<div class="panel panel-inverse">
|
21
|
+
<!-- Panel Heading -->
|
22
|
+
<div class="panel-heading">
|
23
|
+
<div class="panel-heading-btn">
|
24
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-default" data-click="panel-expand"><i class="fa fa-expand"></i></a>
|
25
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-success" data-click="panel-reload"><i class="fa fa-redo"></i></a>
|
26
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-warning" data-click="panel-collapse"><i class="fa fa-minus"></i></a>
|
27
|
+
</div>
|
28
|
+
<h4 class="panel-title"><%= yield(:phc_title_tagline) %></h4>
|
29
|
+
</div>
|
30
|
+
<!-- Panel Heading -->
|
31
|
+
<!-- Panel Body -->
|
32
|
+
<div class="panel-body">
|
33
|
+
<!-- Table - Member - Profiles - Index -->
|
34
|
+
<div class="table-responsive">
|
35
|
+
<table class="table table-striped table-bordered">
|
36
|
+
<thead>
|
37
|
+
<tr>
|
38
|
+
<th>First Name</th>
|
39
|
+
<th>Last Name</th>
|
40
|
+
<th>Email</th>
|
41
|
+
<th>Phone</th>
|
42
|
+
<th></th>
|
43
|
+
</tr>
|
44
|
+
</thead>
|
45
|
+
<tbody>
|
46
|
+
<% @member_profiles.each do |member_profile| %>
|
47
|
+
<tr>
|
48
|
+
<td><%= link_to member_profile.member_profile_first_name, member_profile %></td>
|
49
|
+
<td><%= link_to member_profile.member_profile_last_name, member_profile %></td>
|
50
|
+
<td><%= link_to member_profile.member_profile_email, member_profile %></td>
|
51
|
+
<td><%= link_to member_profile.member_profile_phone, member_profile %></td>
|
52
|
+
<td>
|
53
|
+
<div class="btn-group d-flex" role="group">
|
54
|
+
<%= link_to 'Details', member_profile, class: "btn btn-primary btn-xs" %>
|
55
|
+
<%= link_to 'Update', edit_member_profile_path(member_profile), class: "btn btn-purple btn-xs" %>
|
56
|
+
<%= link_to 'Remove', member_profile, method: :delete, data: { confirm: 'Are you sure? This will also remove the Members addresses and listings. This action cannot be reversed.' }, class: "btn btn-danger btn-xs" %>
|
57
|
+
</div>
|
58
|
+
</td>
|
59
|
+
</tr>
|
60
|
+
<% end %>
|
61
|
+
</tbody>
|
62
|
+
</table>
|
63
|
+
<%= link_to phcdevworks_members.new_member_profile_path, class: "btn btn-primary btn-sm" do %>
|
64
|
+
<i class="fas fa-plus-circle"></i>
|
65
|
+
Add a New Member
|
66
|
+
<% end %>
|
67
|
+
</div>
|
68
|
+
<!-- Table - Member - Profiles - Index -->
|
69
|
+
</div>
|
70
|
+
<!-- Panel Body -->
|
71
|
+
</div>
|
72
|
+
<!-- Page & Panel Content -->
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<!-- Title System -->
|
2
|
+
<% phc_title "Members Manager" %>
|
3
|
+
<% phc_title_tagline "Create a New Member" %>
|
4
|
+
<% phc_breadcrumb_one link_to "Dashboard", phcdevworks_members.dashboard_path %>
|
5
|
+
<% phc_breadcrumb_two link_to "Member Profiles", phcdevworks_members.member_profiles_path %>
|
6
|
+
<% phc_breadcrumb_three yield(:phc_title_tagline) %>
|
7
|
+
<!-- Title System -->
|
8
|
+
|
9
|
+
<!-- Page Bradcrumbs -->
|
10
|
+
<ol class="breadcrumb pull-right">
|
11
|
+
<li class="breadcrumb-item"><%= yield(:phc_breadcrumb_one) %></li>
|
12
|
+
<li class="breadcrumb-item"><%= yield(:phc_breadcrumb_two) %></li>
|
13
|
+
<li class="breadcrumb-item active"><%= yield(:phc_breadcrumb_three) %></li>
|
14
|
+
</ol>
|
15
|
+
<!-- Page Bradcrumbs -->
|
16
|
+
|
17
|
+
<!-- Page Header -->
|
18
|
+
<h1 class="page-header"><%= yield(:phc_title) %></h1>
|
19
|
+
<!-- Page Header -->
|
20
|
+
|
21
|
+
<!-- Page Content -->
|
22
|
+
<div class="panel panel-inverse">
|
23
|
+
<div class="panel-heading">
|
24
|
+
<div class="panel-heading-btn">
|
25
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-default" data-click="panel-expand"><i class="fa fa-expand"></i></a>
|
26
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-success" data-click="panel-reload"><i class="fa fa-redo"></i></a>
|
27
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-warning" data-click="panel-collapse"><i class="fa fa-minus"></i></a>
|
28
|
+
</div>
|
29
|
+
<h4 class="panel-title"><%= yield(:phc_title) %></h4>
|
30
|
+
</div>
|
31
|
+
<div class="panel-body">
|
32
|
+
<!-- Form for New Member Profile -->
|
33
|
+
<%= render 'form', member_profile: @member_profile %>
|
34
|
+
<!-- Form for New Member Profile -->
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<!-- Page Content -->
|
@@ -0,0 +1,102 @@
|
|
1
|
+
<!-- Title System -->
|
2
|
+
<% phc_title "Members Manager" %>
|
3
|
+
<% phc_title_tagline "Detailed Information" %>
|
4
|
+
<% phc_breadcrumb_one link_to "Dashboard", phcdevworks_members.dashboard_path %>
|
5
|
+
<% phc_breadcrumb_two yield(:phc_title_tagline) %>
|
6
|
+
<!-- Title System -->
|
7
|
+
|
8
|
+
<!-- Member Profiles - Header -->
|
9
|
+
<div class="profile">
|
10
|
+
<%= render 'phcdevworks_members/member/profiles/components/profile_header' %>
|
11
|
+
</div>
|
12
|
+
<!-- Member Profiles - Header -->
|
13
|
+
|
14
|
+
<!-- Member Profiles - Remove Full Page Width -->
|
15
|
+
<div class="profile-content">
|
16
|
+
<div class="tab-content p-0">
|
17
|
+
|
18
|
+
<%= render 'phcdevworks_notifications/bootstrap/notifications' %>
|
19
|
+
|
20
|
+
<!-- Member Profiles - Content - Information Tab -->
|
21
|
+
<div class="tab-pane active" id="profile-information">
|
22
|
+
<!-- Member Profiles - Content - Information -->
|
23
|
+
<div class="panel panel-inverse">
|
24
|
+
<div class="panel-heading">
|
25
|
+
<div class="panel-heading-btn">
|
26
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-default" data-click="panel-expand"><i class="fa fa-expand"></i></a>
|
27
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-success" data-click="panel-reload"><i class="fa fa-redo"></i></a>
|
28
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-warning" data-click="panel-collapse"><i class="fa fa-minus"></i></a>
|
29
|
+
</div>
|
30
|
+
<h4 class="panel-title"><%= @member_profile.member_profile_first_name + ' ' + @member_profile.member_profile_last_name %> Information</h4>
|
31
|
+
</div>
|
32
|
+
<div class="panel-body">
|
33
|
+
<%= render 'phcdevworks_members/member/profiles/components/profile_information_table' %>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
<!-- Member Profiles - Content - Information -->
|
37
|
+
</div>
|
38
|
+
<!-- Member Profiles - Content - Information Tab -->
|
39
|
+
|
40
|
+
<!-- Member Profiles - Content - Addresses Tab -->
|
41
|
+
<div class="tab-pane" id="profile-addresses">
|
42
|
+
<!-- Member Profiles - Content - Addresses -->
|
43
|
+
<div class="panel panel-inverse">
|
44
|
+
<div class="panel-heading">
|
45
|
+
<div class="panel-heading-btn">
|
46
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-default" data-click="panel-expand"><i class="fa fa-expand"></i></a>
|
47
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-success" data-click="panel-reload"><i class="fa fa-redo"></i></a>
|
48
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-warning" data-click="panel-collapse"><i class="fa fa-minus"></i></a>
|
49
|
+
</div>
|
50
|
+
<h4 class="panel-title"><%= @member_profile.member_profile_first_name + ' ' + @member_profile.member_profile_last_name %> Addresses</h4>
|
51
|
+
</div>
|
52
|
+
<div class="panel-body">
|
53
|
+
<%= render 'phcdevworks_members/member/profiles/components/profile_addresses_table' %>
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
<!-- Member Profiles - Content - Addresses -->
|
57
|
+
</div>
|
58
|
+
<!-- Member Profiles - Content - Addresses Tab -->
|
59
|
+
|
60
|
+
<!-- Member Profiles - Content - Listings Tab -->
|
61
|
+
<div class="tab-pane fade in" id="profile-listings">
|
62
|
+
<!-- Member Profiles - Content - Listings -->
|
63
|
+
<div class="panel panel-inverse">
|
64
|
+
<div class="panel-heading">
|
65
|
+
<div class="panel-heading-btn">
|
66
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-default" data-click="panel-expand"><i class="fa fa-expand"></i></a>
|
67
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-success" data-click="panel-reload"><i class="fa fa-redo"></i></a>
|
68
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-warning" data-click="panel-collapse"><i class="fa fa-minus"></i></a>
|
69
|
+
</div>
|
70
|
+
<h4 class="panel-title"><%= @member_profile.member_profile_first_name + ' ' + @member_profile.member_profile_last_name %> Listings</h4>
|
71
|
+
</div>
|
72
|
+
<div class="panel-body">
|
73
|
+
<%= render 'phcdevworks_members/member/profiles/components/profile_listings_table' %>
|
74
|
+
</div>
|
75
|
+
</div>
|
76
|
+
<!-- Member Profiles - Content - Listings -->
|
77
|
+
</div>
|
78
|
+
<!-- Member Profiles - Content - Listings Tab -->
|
79
|
+
|
80
|
+
<!-- Member Profiles - Content - Audit Log Tab -->
|
81
|
+
<div class="tab-pane fade in" id="profile-logs">
|
82
|
+
<!-- Member Profiles - Content - Audit Log -->
|
83
|
+
<div class="panel panel-inverse">
|
84
|
+
<div class="panel-heading">
|
85
|
+
<div class="panel-heading-btn">
|
86
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-default" data-click="panel-expand"><i class="fa fa-expand"></i></a>
|
87
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-success" data-click="panel-reload"><i class="fa fa-redo"></i></a>
|
88
|
+
<a href="javascript:;" class="btn btn-xs btn-icon btn-circle btn-warning" data-click="panel-collapse"><i class="fa fa-minus"></i></a>
|
89
|
+
</div>
|
90
|
+
<h4 class="panel-title"><%= @member_profile.member_profile_first_name + ' ' + @member_profile.member_profile_last_name %> Change Log</h4>
|
91
|
+
</div>
|
92
|
+
<div class="panel-body">
|
93
|
+
<%= render 'phcdevworks_members/member/profiles/components/profile_audits_table' %>
|
94
|
+
</div>
|
95
|
+
</div>
|
96
|
+
<!-- Member Profiles - Content - Audit Log -->
|
97
|
+
</div>
|
98
|
+
<!-- Member Profiles - Content - Audit Log Tab -->
|
99
|
+
|
100
|
+
</div>
|
101
|
+
</div>
|
102
|
+
<!-- Member Profiles - Remove Full Page Width -->
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# FriendlyId Global Configuration
|
2
|
+
#
|
3
|
+
# Use this to set up shared configuration options for your entire application.
|
4
|
+
# Any of the configuration options shown here can also be applied to single
|
5
|
+
# models by passing arguments to the `friendly_id` class method or defining
|
6
|
+
# methods in your model.
|
7
|
+
#
|
8
|
+
# To learn more, check out the guide:
|
9
|
+
#
|
10
|
+
# http://norman.github.io/friendly_id/file.Guide.html
|
11
|
+
|
12
|
+
FriendlyId.defaults do |config|
|
13
|
+
# ## Reserved Words
|
14
|
+
#
|
15
|
+
# Some words could conflict with Rails's routes when used as slugs, or are
|
16
|
+
# undesirable to allow as slugs. Edit this list as needed for your app.
|
17
|
+
config.use :reserved
|
18
|
+
|
19
|
+
config.reserved_words = %w(new edit index session login logout users admin
|
20
|
+
stylesheets assets javascripts images)
|
21
|
+
|
22
|
+
# This adds an option to treat reserved words as conflicts rather than exceptions.
|
23
|
+
# When there is no good candidate, a UUID will be appended, matching the existing
|
24
|
+
# conflict behavior.
|
25
|
+
|
26
|
+
# config.treat_reserved_as_conflict = true
|
27
|
+
|
28
|
+
# ## Friendly Finders
|
29
|
+
#
|
30
|
+
# Uncomment this to use friendly finders in all models. By default, if
|
31
|
+
# you wish to find a record by its friendly id, you must do:
|
32
|
+
#
|
33
|
+
# MyModel.friendly.find('foo')
|
34
|
+
#
|
35
|
+
# If you uncomment this, you can do:
|
36
|
+
#
|
37
|
+
# MyModel.find('foo')
|
38
|
+
#
|
39
|
+
# This is significantly more convenient but may not be appropriate for
|
40
|
+
# all applications, so you must explicity opt-in to this behavior. You can
|
41
|
+
# always also configure it on a per-model basis if you prefer.
|
42
|
+
#
|
43
|
+
# Something else to consider is that using the :finders addon boosts
|
44
|
+
# performance because it will avoid Rails-internal code that makes runtime
|
45
|
+
# calls to `Module.extend`.
|
46
|
+
#
|
47
|
+
config.use :finders
|
48
|
+
#
|
49
|
+
# ## Slugs
|
50
|
+
#
|
51
|
+
# Most applications will use the :slugged module everywhere. If you wish
|
52
|
+
# to do so, uncomment the following line.
|
53
|
+
#
|
54
|
+
config.use :slugged
|
55
|
+
#
|
56
|
+
# By default, FriendlyId's :slugged addon expects the slug column to be named
|
57
|
+
# 'slug', but you can change it if you wish.
|
58
|
+
#
|
59
|
+
config.slug_column = 'slug'
|
60
|
+
#
|
61
|
+
# By default, slug has no size limit, but you can change it if you wish.
|
62
|
+
#
|
63
|
+
# config.slug_limit = 255
|
64
|
+
#
|
65
|
+
# When FriendlyId can not generate a unique ID from your base method, it appends
|
66
|
+
# a UUID, separated by a single dash. You can configure the character used as the
|
67
|
+
# separator. If you're upgrading from FriendlyId 4, you may wish to replace this
|
68
|
+
# with two dashes.
|
69
|
+
#
|
70
|
+
# config.sequence_separator = '-'
|
71
|
+
#
|
72
|
+
# Note that you must use the :slugged addon **prior** to the line which
|
73
|
+
# configures the sequence separator, or else FriendlyId will raise an undefined
|
74
|
+
# method error.
|
75
|
+
#
|
76
|
+
# ## Tips and Tricks
|
77
|
+
#
|
78
|
+
# ### Controlling when slugs are generated
|
79
|
+
#
|
80
|
+
# As of FriendlyId 5.0, new slugs are generated only when the slug field is
|
81
|
+
# nil, but if you're using a column as your base method can change this
|
82
|
+
# behavior by overriding the `should_generate_new_friendly_id?` method that
|
83
|
+
# FriendlyId adds to your model. The change below makes FriendlyId 5.0 behave
|
84
|
+
# more like 4.0.
|
85
|
+
# Note: Use(include) Slugged module in the config if using the anonymous module.
|
86
|
+
# If you have `friendly_id :name, use: slugged` in the model, Slugged module
|
87
|
+
# is included after the anonymous module defined in the initializer, so it
|
88
|
+
# overrides the `should_generate_new_friendly_id?` method from the anonymous module.
|
89
|
+
#
|
90
|
+
# config.use :slugged
|
91
|
+
# config.use Module.new {
|
92
|
+
# def should_generate_new_friendly_id?
|
93
|
+
# slug.blank? || <your_column_name_here>_changed?
|
94
|
+
# end
|
95
|
+
# }
|
96
|
+
#
|
97
|
+
# FriendlyId uses Rails's `parameterize` method to generate slugs, but for
|
98
|
+
# languages that don't use the Roman alphabet, that's not usually sufficient.
|
99
|
+
# Here we use the Babosa library to transliterate Russian Cyrillic slugs to
|
100
|
+
# ASCII. If you use this, don't forget to add "babosa" to your Gemfile.
|
101
|
+
#
|
102
|
+
# config.use Module.new {
|
103
|
+
# def normalize_friendly_id(text)
|
104
|
+
# text.to_slug.normalize! :transliterations => [:russian, :latin]
|
105
|
+
# end
|
106
|
+
# }
|
107
|
+
end
|