phcmembers 61.0.0 → 61.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +2 -2
  4. data/app/assets/javascripts/phcmembers/application.js +1 -1
  5. data/app/assets/stylesheets/phcmembers/application.scss +1 -1
  6. data/app/controllers/phcmembers/api/v1/categories_controller.rb +15 -0
  7. data/app/controllers/phcmembers/api/v1/listings_controller.rb +16 -0
  8. data/app/controllers/phcmembers/application_controller.rb +18 -16
  9. data/app/controllers/phcmembers/directory/categories_controller.rb +14 -13
  10. data/app/controllers/phcmembers/member/addresses_controller.rb +21 -21
  11. data/app/controllers/phcmembers/member/dashboards_controller.rb +17 -0
  12. data/app/controllers/phcmembers/member/listings_controller.rb +17 -18
  13. data/app/controllers/phcmembers/member/profiles_controller.rb +15 -16
  14. data/app/helpers/phcmembers/application_helper.rb +2 -12
  15. data/app/jobs/phcmembers/application_job.rb +2 -2
  16. data/app/mailers/phcmembers/application_mailer.rb +4 -6
  17. data/app/models/phcmembers/application_record.rb +3 -3
  18. data/app/models/phcmembers/category_versions.rb +3 -3
  19. data/app/models/phcmembers/directory.rb +5 -5
  20. data/app/models/phcmembers/directory/category.rb +3 -6
  21. data/app/models/phcmembers/listing_versions.rb +3 -3
  22. data/app/models/phcmembers/member/address.rb +28 -28
  23. data/app/models/phcmembers/member/listing.rb +48 -49
  24. data/app/models/phcmembers/member/profile.rb +36 -36
  25. data/app/models/phcmembers/profile_versions.rb +3 -3
  26. data/app/views/layouts/phcmembers/application.html.erb +16 -18
  27. data/app/views/layouts/phcmembers/application_full_width.html.erb +80 -82
  28. data/app/views/layouts/phcmembers/components/backend/footer/_footer.html.erb +1 -1
  29. data/app/views/layouts/phcmembers/components/backend/navigation/_top_menu.html.erb +79 -143
  30. data/app/views/layouts/phcmembers/components/backend/sidebars/_side_menu.html.erb +154 -116
  31. data/app/views/layouts/phcmembers/components/frontend/footer/_footer.html.erb +14 -0
  32. data/app/views/layouts/phcmembers/components/frontend/footer/_footer_copyright.html.erb +19 -0
  33. data/app/views/layouts/phcmembers/components/frontend/header/_slideout.html.erb +24 -0
  34. data/app/views/layouts/phcmembers/components/frontend/header/_topbar.html.erb +17 -0
  35. data/app/views/layouts/phcmembers/components/frontend/navigation/_navigation.html.erb +27 -0
  36. data/app/views/layouts/phcmembers/components/frontend/pages/_titlebars.html.erb +14 -0
  37. data/app/views/layouts/phcmembers/components/frontend/seo/_seo_main.html.erb +5 -0
  38. data/app/views/layouts/phcmembers/mailer.html.erb +12 -0
  39. data/app/views/layouts/phcmembers/mailer.text.erb +1 -0
  40. data/app/views/phcmembers/api/v1/categories/index.json.rabl +2 -0
  41. data/app/views/phcmembers/api/v1/listings/index.json.rabl +2 -0
  42. data/app/views/phcmembers/directory/categories/_form.html.erb +12 -6
  43. data/app/views/phcmembers/directory/categories/components/_category_audits.html.erb +24 -10
  44. data/app/views/phcmembers/directory/categories/components/_category_list.html.erb +15 -7
  45. data/app/views/phcmembers/directory/categories/components/_category_main.html.erb +26 -20
  46. data/app/views/phcmembers/directory/categories/components/_category_sidebar.html.erb +16 -0
  47. data/app/views/phcmembers/directory/categories/edit.html.erb +25 -28
  48. data/app/views/phcmembers/directory/categories/index.html.erb +33 -38
  49. data/app/views/phcmembers/directory/categories/new.html.erb +25 -28
  50. data/app/views/phcmembers/directory/categories/show.html.erb +24 -17
  51. data/app/views/phcmembers/member/addresses/_form.html.erb +1 -1
  52. data/app/views/phcmembers/member/addresses/edit.html.erb +15 -3
  53. data/app/views/phcmembers/member/addresses/index.html.erb +16 -3
  54. data/app/views/phcmembers/member/addresses/new.html.erb +14 -2
  55. data/app/views/phcmembers/member/addresses/show.html.erb +14 -2
  56. data/app/views/phcmembers/member/dashboards/index.html.erb +62 -0
  57. data/app/views/phcmembers/member/listings/_form.html.erb +25 -25
  58. data/app/views/phcmembers/member/listings/edit.html.erb +14 -2
  59. data/app/views/phcmembers/member/listings/index.html.erb +16 -3
  60. data/app/views/phcmembers/member/listings/new.html.erb +14 -2
  61. data/app/views/phcmembers/member/listings/show.html.erb +15 -3
  62. data/app/views/phcmembers/member/profiles/components/_profile_header.html.erb +29 -29
  63. data/app/views/phcmembers/member/profiles/edit.html.erb +15 -2
  64. data/app/views/phcmembers/member/profiles/index.html.erb +12 -1
  65. data/app/views/phcmembers/member/profiles/new.html.erb +15 -2
  66. data/app/views/phcmembers/member/profiles/show.html.erb +1 -1
  67. data/config/routes.rb +12 -15
  68. data/db/migrate/20160728231036_create_phcmembers_member_profiles.rb +5 -2
  69. data/lib/phcmembers/engine.rb +67 -61
  70. data/lib/phcmembers/version.rb +1 -1
  71. metadata +101 -113
  72. data/app/controllers/phcmembers/api/directories_controller.rb +0 -18
  73. data/app/controllers/phcmembers/directory/categorylistings_controller.rb +0 -30
  74. data/app/controllers/phcmembers/modules/dashboards_controller.rb +0 -17
  75. data/app/models/phcmembers/category_listing_versions.rb +0 -5
  76. data/app/models/phcmembers/connections.rb +0 -7
  77. data/app/models/phcmembers/directory/categorylisting.rb +0 -12
  78. data/app/views/layouts/phcmembers/directory/directory_all.html.erb +0 -56
  79. data/app/views/layouts/phcmembers/members/members_all.html.erb +0 -56
  80. data/app/views/phcmembers/directory/categorylistings/components/_category_listing_audits.html.erb +0 -11
  81. data/app/views/phcmembers/directory/categorylistings/components/_category_listing_list.html.erb +0 -7
  82. data/app/views/phcmembers/directory/categorylistings/components/_category_listing_main.html.erb +0 -22
  83. data/app/views/phcmembers/directory/categorylistings/index.html.erb +0 -62
  84. data/app/views/phcmembers/directory/categorylistings/show.html.erb +0 -25
  85. data/app/views/phcmembers/modules/dashboards/index.html.erb +0 -66
@@ -1,11 +1,23 @@
1
1
  <!-- Title Variables -->
2
2
  <% phc_title "Member Listing Manager" %>
3
3
  <% phc_title_tagline "Create a New Listing for " + @members_profile_info.mfirstname + " " + @members_profile_info.mlastname %>
4
- <% phc_breadcrumb_one link_to "Dashboard", phcmembers.modules_dashboards_index_path %>
5
- <% phc_breadcrumb_two link_to "Members List", phcmembers.member_profiles_path %>
4
+ <% phc_breadcrumb_one link_to "Members List", phcmembers.member_profiles_path %>
5
+ <% phc_breadcrumb_two link_to "Listings for " + @members_profile_info.mfirstname + " " + @members_profile_info.mlastname, phcmembers.member_profile_listings_path %>
6
6
  <% phc_breadcrumb_three yield(:phc_title_tagline) %>
7
7
  <!-- Title System -->
8
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
+
9
21
  <!-- Page Content -->
10
22
  <div class="panel panel-inverse">
11
23
  <div class="panel-heading">
@@ -1,11 +1,23 @@
1
1
  <!-- Title Variables -->
2
2
  <% phc_title "Member Listing Manager" %>
3
- <% phc_title_tagline "Listing Information for " + @members_profile_info.mfirstname + " " + @members_profile_info.mlastname %>
4
- <% phc_breadcrumb_one link_to "Dashboard", phcmembers.modules_dashboards_index_path %>
5
- <% phc_breadcrumb_two link_to "Members List", phcmembers.member_profiles_path %>
3
+ <% phc_title_tagline "Detailed Listing Information for " + @members_profile_info.mfirstname + " " + @members_profile_info.mlastname %>
4
+ <% phc_breadcrumb_one link_to "Members List", phcmembers.member_profiles_path %>
5
+ <% phc_breadcrumb_two link_to "Listings for " + @members_profile_info.mfirstname + " " + @members_profile_info.mlastname, phcmembers.member_profile_listings_path %>
6
6
  <% phc_breadcrumb_three yield(:phc_title_tagline) %>
7
7
  <!-- Title System -->
8
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
+
9
21
  <!-- Page Content -->
10
22
  <div class="panel panel-inverse">
11
23
  <div class="panel-heading">
@@ -1,29 +1,29 @@
1
- <div class="profile-header">
2
- <!-- Member Profiles - Header - Cover -->
3
- <div class="profile-header-cover"></div>
4
- <!-- Member Profiles - Header - Cover -->
5
-
6
- <!-- Member Profiles - Header - Content -->
7
- <div class="profile-header-content">
8
- <div class="profile-header-img">
9
- <%= image_tag current_user.gravatar_url :secure => true, :filetype => :png, :size => 128 %>
10
- </div>
11
- <div class="profile-header-info">
12
- <h4 class="m-t-10 m-b-5"><%= current_user.firstname %> <%= current_user.lastname %></h4>
13
- <p class="m-b-10"><%= current_user.username %></p>
14
- <%= link_to edit_member_profile_path(@member_profile), class: "btn btn-xs btn-yellow" do %>
15
- <i class="fal fa-pencil"></i> Edit Member
16
- <% end %>
17
- </div>
18
- </div>
19
- <!-- Member Profiles - Header - Content -->
20
-
21
- <!-- Member Profiles - Header - Tab Bar -->
22
- <ul class="profile-header-tab nav nav-tabs">
23
- <li class="nav-item"><a href="#profile-addresses" class="nav-link active" data-toggle="tab">MEMBER ADDRESSES</a></li>
24
- <li class="nav-item"><a href="#profile-listings" class="nav-link" data-toggle="tab">MEMBER LISTINGS</a></li>
25
- <li class="nav-item"><a href="#profile-logs" class="nav-link" data-toggle="tab">MEMBER CHANGE LOG</a></li>
26
- </ul>
27
- <!-- Member Profiles - Header - Tab Bar -->
28
-
29
- </div>
1
+ <div class="profile-header">
2
+ <!-- Member Profiles - Header - Cover -->
3
+ <div class="profile-header-cover"></div>
4
+ <!-- Member Profiles - Header - Cover -->
5
+
6
+ <!-- Member Profiles - Header - Content -->
7
+ <div class="profile-header-content">
8
+ <div class="profile-header-img">
9
+ <%= image_tag @member_profile.gravatar_url :secure => true, :filetype => :png, :size => 128 %>
10
+ </div>
11
+ <div class="profile-header-info">
12
+ <h4 class="m-t-10 m-b-5"><%= @member_profile.mfirstname + ' ' + @member_profile.mlastname %></h4>
13
+ <p class="m-b-10"><%= @member_profile.memail %></p>
14
+ <%= link_to edit_member_profile_path(@member_profile), class: "btn btn-xs btn-yellow" do %>
15
+ <i class="far fa-pencil-alt"></i> Edit Member
16
+ <% end %>
17
+ </div>
18
+ </div>
19
+ <!-- Member Profiles - Header - Content -->
20
+
21
+ <!-- Member Profiles - Header - Tab Bar -->
22
+ <ul class="profile-header-tab nav nav-tabs">
23
+ <li class="nav-item"><a href="#profile-addresses" class="nav-link active" data-toggle="tab">MEMBER ADDRESSES</a></li>
24
+ <li class="nav-item"><a href="#profile-listings" class="nav-link" data-toggle="tab">MEMBER LISTINGS</a></li>
25
+ <li class="nav-item"><a href="#profile-logs" class="nav-link" data-toggle="tab">MEMBER CHANGE LOG</a></li>
26
+ </ul>
27
+ <!-- Member Profiles - Header - Tab Bar -->
28
+
29
+ </div>
@@ -1,10 +1,23 @@
1
1
  <!-- Title System -->
2
2
  <% phc_title "Members Manager" %>
3
3
  <% phc_title_tagline "Update Member Information for " + @member_profile.mfirstname + " " + @member_profile.mlastname %>
4
- <% phc_breadcrumb_one link_to "Dashboard", phcmembers.modules_dashboards_index_path %>
5
- <% phc_breadcrumb_two yield(:phc_title_tagline) %>
4
+ <% phc_breadcrumb_one link_to "Dashboard", phcmembers.dashboard_path %>
5
+ <% phc_breadcrumb_two link_to "Member Profiles", phcmembers.member_profiles_path %>
6
+ <% phc_breadcrumb_three yield(:phc_title_tagline) %>
6
7
  <!-- Title System -->
7
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
+
8
21
  <!-- Page Content -->
9
22
  <div class="panel panel-inverse">
10
23
  <div class="panel-heading">
@@ -1,10 +1,21 @@
1
1
  <!-- Title System -->
2
2
  <% phc_title "Members Manager" %>
3
3
  <% phc_title_tagline "Members List" %>
4
- <% phc_breadcrumb_one link_to "Dashboard", phcmembers.modules_dashboards_index_path %>
4
+ <% phc_breadcrumb_one link_to "Dashboard", phcmembers.dashboard_path %>
5
5
  <% phc_breadcrumb_two yield(:phc_title_tagline) %>
6
6
  <!-- Title System -->
7
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
+
8
19
  <!-- Page Content -->
9
20
  <div class="panel panel-inverse">
10
21
  <div class="panel-heading">
@@ -1,10 +1,23 @@
1
1
  <!-- Title System -->
2
2
  <% phc_title "Members Manager" %>
3
3
  <% phc_title_tagline "Create a New Member" %>
4
- <% phc_breadcrumb_one link_to "Dashboard", phcmembers.modules_dashboards_index_path %>
5
- <% phc_breadcrumb_two yield(:phc_title_tagline) %>
4
+ <% phc_breadcrumb_one link_to "Dashboard", phcmembers.dashboard_path %>
5
+ <% phc_breadcrumb_two link_to "Member Profiles", phcmembers.member_profiles_path %>
6
+ <% phc_breadcrumb_three yield(:phc_title_tagline) %>
6
7
  <!-- Title System -->
7
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
+
8
21
  <!-- Page Content -->
9
22
  <div class="panel panel-inverse">
10
23
  <div class="panel-heading">
@@ -1,7 +1,7 @@
1
1
  <!-- Title System -->
2
2
  <% phc_title "Members Manager" %>
3
3
  <% phc_title_tagline "Detailed Information" %>
4
- <% phc_breadcrumb_one link_to "Dashboard", phcmembers.modules_dashboards_index_path %>
4
+ <% phc_breadcrumb_one link_to "Dashboard", phcmembers.dashboard_path %>
5
5
  <% phc_breadcrumb_two yield(:phc_title_tagline) %>
6
6
  <!-- Title System -->
7
7
 
data/config/routes.rb CHANGED
@@ -1,21 +1,23 @@
1
1
  Phcmembers::Engine.routes.draw do
2
2
 
3
- # Dashboard (Engine Root)
4
- get 'modules/dashboards/index'
5
- root 'modules/dashboards#index'
3
+ # Mount Accounts Engine
4
+ mount Phcaccounts::Engine, :at => '/'
6
5
 
7
6
  # Application API
8
7
  namespace :api do
9
- # Routes for API
10
- resources :catsapi, defaults: {format: 'json'} do
11
- resources :listapi
8
+ namespace :v1 do
9
+ # Routes for API
10
+ resources :categories, defaults: {format: 'json'} do
11
+ resources :listings, defaults: {format: 'json'}
12
+ end
12
13
  end
13
14
  end
14
15
 
15
- # Members Section
16
+ # Application Dashboard
17
+ get 'dashboard', to: 'member/dashboards#index'
18
+
19
+ # Application Members Management
16
20
  namespace :member do
17
- # Members Main Index
18
- root 'profiles#index'
19
21
  # Member Routes
20
22
  resources :profiles, class_name: 'Phcmembers::Member::Profile' do
21
23
  resources :listings, class_name: 'Phcmembers::Member::Listing'
@@ -23,15 +25,10 @@ Phcmembers::Engine.routes.draw do
23
25
  end
24
26
  end
25
27
 
26
- # Directory Section
28
+ # Application Directory Management
27
29
  namespace :directory do
28
30
  # Members Main Index
29
- root 'categories#index'
30
31
  resources :categories, class_name: 'Phcmembers::Directory::Category'
31
- resources :categorylistings, class_name: 'Phcmembers::Directory::Categorylisting'
32
32
  end
33
-
34
- # Add Security Features
35
- mount Phcaccounts::Engine => "/"
36
33
 
37
34
  end
@@ -1,5 +1,6 @@
1
1
  class CreatePhcmembersMemberProfiles < ActiveRecord::Migration[5.2]
2
2
  def change
3
+
3
4
  create_table :phcmembers_member_profiles do |t|
4
5
 
5
6
  t.string :mfirstname
@@ -9,11 +10,13 @@ class CreatePhcmembersMemberProfiles < ActiveRecord::Migration[5.2]
9
10
  t.string :mphone
10
11
  t.string :mnotes
11
12
 
12
- t.string :user_id
13
13
  t.string :slug
14
14
 
15
+ t.string :user_id
16
+
15
17
  t.timestamps
16
18
 
17
19
  end
20
+
18
21
  end
19
- end
22
+ end
@@ -1,64 +1,70 @@
1
1
  module Phcmembers
2
- class Engine < ::Rails::Engine
3
-
4
- # PHCTheme Dependencies
5
- require 'phctheme1'
6
- require 'phctheme2'
7
- require 'phctheme3'
8
- require 'phctheme4'
9
- require 'phctheme5'
10
- require 'phctheme6'
11
- require 'phctheme7'
12
-
13
- require 'phcadmin1'
14
- require 'phcadmin2'
15
- require 'phcadmin3'
16
- require 'phcadmin4'
17
- require 'phcadmin5'
18
- require 'phcadmin6'
19
- require 'phcadmin7'
20
-
21
- # PHC Helper Dependencies
22
- require 'phcnotifi'
23
- require 'phctitleseo'
24
-
25
- # UI & URL Frontend Dependencies
26
- require 'gravtastic'
27
- require 'friendly_id'
28
-
29
- # File Upload & Service Dependencies
30
- require 'aws-sdk-s3'
31
- require 'google-cloud-storage'
32
- require 'mini_magick'
33
-
34
- # Database & Paper Trail Dependencies
35
- require 'paper_trail'
36
- require 'pg'
37
-
38
- # Security Dependencies
39
- require 'phcaccounts'
2
+ class Engine < ::Rails::Engine
40
3
 
41
- # Isolate Namespace
42
- isolate_namespace Phcmembers
43
-
44
- # Testing Generator
45
- config.generators do |g|
46
- g.test_framework :rspec,
47
- fixtures: true,
48
- view_specs: false,
49
- helper_specs: false,
50
- routing_specs: false,
51
- controller_specs: true,
52
- request_specs: false
53
- g.fixture_replacement :factory_bot,
54
- dir: "spec/factories"
55
- end
56
-
57
- # Load Requried Helper Files
58
- config.to_prepare do
59
- Phcnotifi::ApplicationController.helper(ApplicationHelper)
60
- Phctitleseo::ApplicationController.helper(ApplicationHelper)
61
- end
62
-
63
- end
4
+ # PHCTheme Dependencies
5
+ require 'phctheme1'
6
+ require 'phctheme2'
7
+ require 'phctheme3'
8
+ require 'phctheme4'
9
+ require 'phctheme5'
10
+ require 'phctheme6'
11
+ require 'phctheme7'
12
+
13
+ # PHCAdmin Dependencies
14
+ require 'phcadmin1'
15
+ require 'phcadmin2'
16
+ require 'phcadmin3'
17
+ require 'phcadmin4'
18
+ require 'phcadmin5'
19
+ require 'phcadmin6'
20
+ require 'phcadmin7'
21
+
22
+ # PHCHelper Dependencies
23
+ require 'phccorehelpers'
24
+ require 'phcmenus'
25
+ require 'phcnotifi'
26
+ require 'phctitleseo'
27
+
28
+ # Frontend Dependencies
29
+ require 'gravtastic'
30
+ require 'friendly_id'
31
+
32
+ # Upload Dependencies
33
+ require 'aws-sdk-s3'
34
+ require 'google-cloud-storage'
35
+ require 'mini_magick'
36
+
37
+ # Database Dependencies
38
+ require 'paper_trail'
39
+ require 'pg'
40
+
41
+ # Payment Dependencies
42
+ require 'phcaccounts'
43
+
44
+ # Isolate Namespace
45
+ isolate_namespace Phcmembers
46
+
47
+ # Testing Generator
48
+ config.generators do |g|
49
+ g.test_framework :rspec,
50
+ fixtures: true,
51
+ view_specs: false,
52
+ helper_specs: false,
53
+ routing_specs: false,
54
+ controller_specs: true,
55
+ request_specs: false
56
+ g.fixture_replacement :factory_bot,
57
+ dir: "spec/factories"
58
+ end
59
+
60
+ # Load Requried Helper Files
61
+ config.to_prepare do
62
+ Phccorehelpers::ApplicationController.helper(ApplicationHelper)
63
+ Phcmenus::ApplicationController.helper(ApplicationHelper)
64
+ Phcnotifi::ApplicationController.helper(ApplicationHelper)
65
+ Phctitleseo::ApplicationController.helper(ApplicationHelper)
66
+ Phcaccounts::ApplicationController.helper(ApplicationHelper)
67
+ end
68
+
69
+ end
64
70
  end
@@ -1,3 +1,3 @@
1
1
  module Phcmembers
2
- VERSION = "61.0.0"
2
+ VERSION = "61.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phcmembers
3
3
  version: !ruby/object:Gem::Version
4
- version: 61.0.0
4
+ version: 61.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - BradPotts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-01 00:00:00.000000000 Z
11
+ date: 2019-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -36,224 +36,252 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '48.0'
39
+ version: '48.3'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '48.0'
46
+ version: '48.3'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: phcadmin2
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '50.0'
53
+ version: '50.3'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '50.0'
60
+ version: '50.3'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: phcadmin3
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '43.0'
67
+ version: '43.3'
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '43.0'
74
+ version: '43.3'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: phcadmin4
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '25.0'
81
+ version: '25.3'
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '25.0'
88
+ version: '25.3'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: phcadmin5
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '24.0'
95
+ version: '24.3'
96
96
  type: :runtime
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '24.0'
102
+ version: '24.3'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: phcadmin6
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '13.0'
109
+ version: '13.3'
110
110
  type: :runtime
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '13.0'
116
+ version: '13.3'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: phcadmin7
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '7.0'
123
+ version: '7.3'
124
124
  type: :runtime
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: '7.0'
130
+ version: '7.3'
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: phctheme1
133
133
  requirement: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: '53.0'
137
+ version: '53.3'
138
138
  type: :runtime
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '53.0'
144
+ version: '53.3'
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: phctheme2
147
147
  requirement: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '42.0'
151
+ version: '42.3'
152
152
  type: :runtime
153
153
  prerelease: false
154
154
  version_requirements: !ruby/object:Gem::Requirement
155
155
  requirements:
156
156
  - - "~>"
157
157
  - !ruby/object:Gem::Version
158
- version: '42.0'
158
+ version: '42.3'
159
159
  - !ruby/object:Gem::Dependency
160
160
  name: phctheme3
161
161
  requirement: !ruby/object:Gem::Requirement
162
162
  requirements:
163
163
  - - "~>"
164
164
  - !ruby/object:Gem::Version
165
- version: '22.0'
165
+ version: '22.3'
166
166
  type: :runtime
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - "~>"
171
171
  - !ruby/object:Gem::Version
172
- version: '22.0'
172
+ version: '22.3'
173
173
  - !ruby/object:Gem::Dependency
174
174
  name: phctheme4
175
175
  requirement: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: '19.0'
179
+ version: '19.3'
180
180
  type: :runtime
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
183
183
  requirements:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: '19.0'
186
+ version: '19.3'
187
187
  - !ruby/object:Gem::Dependency
188
188
  name: phctheme5
189
189
  requirement: !ruby/object:Gem::Requirement
190
190
  requirements:
191
191
  - - "~>"
192
192
  - !ruby/object:Gem::Version
193
- version: '15.0'
193
+ version: '15.3'
194
194
  type: :runtime
195
195
  prerelease: false
196
196
  version_requirements: !ruby/object:Gem::Requirement
197
197
  requirements:
198
198
  - - "~>"
199
199
  - !ruby/object:Gem::Version
200
- version: '15.0'
200
+ version: '15.3'
201
201
  - !ruby/object:Gem::Dependency
202
202
  name: phctheme6
203
203
  requirement: !ruby/object:Gem::Requirement
204
204
  requirements:
205
205
  - - "~>"
206
206
  - !ruby/object:Gem::Version
207
- version: '8.0'
207
+ version: '8.3'
208
208
  type: :runtime
209
209
  prerelease: false
210
210
  version_requirements: !ruby/object:Gem::Requirement
211
211
  requirements:
212
212
  - - "~>"
213
213
  - !ruby/object:Gem::Version
214
- version: '8.0'
214
+ version: '8.3'
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: phctheme7
217
217
  requirement: !ruby/object:Gem::Requirement
218
218
  requirements:
219
219
  - - "~>"
220
220
  - !ruby/object:Gem::Version
221
- version: '2.0'
221
+ version: '2.3'
222
222
  type: :runtime
223
223
  prerelease: false
224
224
  version_requirements: !ruby/object:Gem::Requirement
225
225
  requirements:
226
226
  - - "~>"
227
227
  - !ruby/object:Gem::Version
228
- version: '2.0'
228
+ version: '2.3'
229
+ - !ruby/object:Gem::Dependency
230
+ name: phccorehelpers
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '3.3'
236
+ type: :runtime
237
+ prerelease: false
238
+ version_requirements: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: '3.3'
243
+ - !ruby/object:Gem::Dependency
244
+ name: phcmenus
245
+ requirement: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: '2.3'
250
+ type: :runtime
251
+ prerelease: false
252
+ version_requirements: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - "~>"
255
+ - !ruby/object:Gem::Version
256
+ version: '2.3'
229
257
  - !ruby/object:Gem::Dependency
230
258
  name: phcnotifi
231
259
  requirement: !ruby/object:Gem::Requirement
232
260
  requirements:
233
261
  - - "~>"
234
262
  - !ruby/object:Gem::Version
235
- version: '44.1'
263
+ version: '44.3'
236
264
  type: :runtime
237
265
  prerelease: false
238
266
  version_requirements: !ruby/object:Gem::Requirement
239
267
  requirements:
240
268
  - - "~>"
241
269
  - !ruby/object:Gem::Version
242
- version: '44.1'
270
+ version: '44.3'
243
271
  - !ruby/object:Gem::Dependency
244
272
  name: phctitleseo
245
273
  requirement: !ruby/object:Gem::Requirement
246
274
  requirements:
247
275
  - - "~>"
248
276
  - !ruby/object:Gem::Version
249
- version: '45.1'
277
+ version: '45.3'
250
278
  type: :runtime
251
279
  prerelease: false
252
280
  version_requirements: !ruby/object:Gem::Requirement
253
281
  requirements:
254
282
  - - "~>"
255
283
  - !ruby/object:Gem::Version
256
- version: '45.1'
284
+ version: '45.3'
257
285
  - !ruby/object:Gem::Dependency
258
286
  name: friendly_id
259
287
  requirement: !ruby/object:Gem::Requirement
@@ -302,14 +330,14 @@ dependencies:
302
330
  requirements:
303
331
  - - "~>"
304
332
  - !ruby/object:Gem::Version
305
- version: '1.17'
333
+ version: '1.18'
306
334
  type: :runtime
307
335
  prerelease: false
308
336
  version_requirements: !ruby/object:Gem::Requirement
309
337
  requirements:
310
338
  - - "~>"
311
339
  - !ruby/object:Gem::Version
312
- version: '1.17'
340
+ version: '1.18'
313
341
  - !ruby/object:Gem::Dependency
314
342
  name: mini_magick
315
343
  requirement: !ruby/object:Gem::Requirement
@@ -400,14 +428,14 @@ dependencies:
400
428
  requirements:
401
429
  - - "~>"
402
430
  - !ruby/object:Gem::Version
403
- version: '10.2'
431
+ version: '10.3'
404
432
  type: :runtime
405
433
  prerelease: false
406
434
  version_requirements: !ruby/object:Gem::Requirement
407
435
  requirements:
408
436
  - - "~>"
409
437
  - !ruby/object:Gem::Version
410
- version: '10.2'
438
+ version: '10.3'
411
439
  - !ruby/object:Gem::Dependency
412
440
  name: pg
413
441
  requirement: !ruby/object:Gem::Requirement
@@ -428,14 +456,14 @@ dependencies:
428
456
  requirements:
429
457
  - - "~>"
430
458
  - !ruby/object:Gem::Version
431
- version: '33.0'
459
+ version: '35.0'
432
460
  type: :runtime
433
461
  prerelease: false
434
462
  version_requirements: !ruby/object:Gem::Requirement
435
463
  requirements:
436
464
  - - "~>"
437
465
  - !ruby/object:Gem::Version
438
- version: '33.0'
466
+ version: '35.0'
439
467
  - !ruby/object:Gem::Dependency
440
468
  name: sqlite3
441
469
  requirement: !ruby/object:Gem::Requirement
@@ -513,49 +541,21 @@ dependencies:
513
541
  - !ruby/object:Gem::Version
514
542
  version: '3.8'
515
543
  - !ruby/object:Gem::Dependency
516
- name: factory_bot_rails
517
- requirement: !ruby/object:Gem::Requirement
518
- requirements:
519
- - - "~>"
520
- - !ruby/object:Gem::Version
521
- version: '5.0'
522
- type: :development
523
- prerelease: false
524
- version_requirements: !ruby/object:Gem::Requirement
525
- requirements:
526
- - - "~>"
527
- - !ruby/object:Gem::Version
528
- version: '5.0'
529
- - !ruby/object:Gem::Dependency
530
- name: faker
531
- requirement: !ruby/object:Gem::Requirement
532
- requirements:
533
- - - "~>"
534
- - !ruby/object:Gem::Version
535
- version: '1.9'
536
- type: :development
537
- prerelease: false
538
- version_requirements: !ruby/object:Gem::Requirement
539
- requirements:
540
- - - "~>"
541
- - !ruby/object:Gem::Version
542
- version: '1.9'
543
- - !ruby/object:Gem::Dependency
544
- name: launchy
544
+ name: nokogiri
545
545
  requirement: !ruby/object:Gem::Requirement
546
546
  requirements:
547
547
  - - "~>"
548
548
  - !ruby/object:Gem::Version
549
- version: '2.4'
549
+ version: '1.10'
550
550
  type: :development
551
551
  prerelease: false
552
552
  version_requirements: !ruby/object:Gem::Requirement
553
553
  requirements:
554
554
  - - "~>"
555
555
  - !ruby/object:Gem::Version
556
- version: '2.4'
556
+ version: '1.10'
557
557
  - !ruby/object:Gem::Dependency
558
- name: letter_opener
558
+ name: database_cleaner
559
559
  requirement: !ruby/object:Gem::Requirement
560
560
  requirements:
561
561
  - - "~>"
@@ -569,75 +569,61 @@ dependencies:
569
569
  - !ruby/object:Gem::Version
570
570
  version: '1.7'
571
571
  - !ruby/object:Gem::Dependency
572
- name: shoulda-matchers
573
- requirement: !ruby/object:Gem::Requirement
574
- requirements:
575
- - - "~>"
576
- - !ruby/object:Gem::Version
577
- version: '4.0'
578
- type: :development
579
- prerelease: false
580
- version_requirements: !ruby/object:Gem::Requirement
581
- requirements:
582
- - - "~>"
583
- - !ruby/object:Gem::Version
584
- version: '4.0'
585
- - !ruby/object:Gem::Dependency
586
- name: simplecov
572
+ name: selenium-webdriver
587
573
  requirement: !ruby/object:Gem::Requirement
588
574
  requirements:
589
575
  - - "~>"
590
576
  - !ruby/object:Gem::Version
591
- version: 0.16.1
577
+ version: '3.141'
592
578
  type: :development
593
579
  prerelease: false
594
580
  version_requirements: !ruby/object:Gem::Requirement
595
581
  requirements:
596
582
  - - "~>"
597
583
  - !ruby/object:Gem::Version
598
- version: 0.16.1
584
+ version: '3.141'
599
585
  - !ruby/object:Gem::Dependency
600
- name: nokogiri
586
+ name: factory_bot_rails
601
587
  requirement: !ruby/object:Gem::Requirement
602
588
  requirements:
603
589
  - - "~>"
604
590
  - !ruby/object:Gem::Version
605
- version: '1.10'
591
+ version: '5.0'
606
592
  type: :development
607
593
  prerelease: false
608
594
  version_requirements: !ruby/object:Gem::Requirement
609
595
  requirements:
610
596
  - - "~>"
611
597
  - !ruby/object:Gem::Version
612
- version: '1.10'
598
+ version: '5.0'
613
599
  - !ruby/object:Gem::Dependency
614
- name: database_cleaner
600
+ name: faker
615
601
  requirement: !ruby/object:Gem::Requirement
616
602
  requirements:
617
603
  - - "~>"
618
604
  - !ruby/object:Gem::Version
619
- version: '1.7'
605
+ version: '1.9'
620
606
  type: :development
621
607
  prerelease: false
622
608
  version_requirements: !ruby/object:Gem::Requirement
623
609
  requirements:
624
610
  - - "~>"
625
611
  - !ruby/object:Gem::Version
626
- version: '1.7'
612
+ version: '1.9'
627
613
  - !ruby/object:Gem::Dependency
628
- name: selenium-webdriver
614
+ name: launchy
629
615
  requirement: !ruby/object:Gem::Requirement
630
616
  requirements:
631
617
  - - "~>"
632
618
  - !ruby/object:Gem::Version
633
- version: '3.141'
619
+ version: '2.4'
634
620
  type: :development
635
621
  prerelease: false
636
622
  version_requirements: !ruby/object:Gem::Requirement
637
623
  requirements:
638
624
  - - "~>"
639
625
  - !ruby/object:Gem::Version
640
- version: '3.141'
626
+ version: '2.4'
641
627
  description: Ruby on Rails 5.2 Engine to Manage Member Information and Business Directory
642
628
  Listings
643
629
  email:
@@ -652,25 +638,22 @@ files:
652
638
  - app/assets/config/phcmembers_manifest.js
653
639
  - app/assets/javascripts/phcmembers/application.js
654
640
  - app/assets/stylesheets/phcmembers/application.scss
655
- - app/controllers/phcmembers/api/directories_controller.rb
641
+ - app/controllers/phcmembers/api/v1/categories_controller.rb
642
+ - app/controllers/phcmembers/api/v1/listings_controller.rb
656
643
  - app/controllers/phcmembers/application_controller.rb
657
644
  - app/controllers/phcmembers/directory/categories_controller.rb
658
- - app/controllers/phcmembers/directory/categorylistings_controller.rb
659
645
  - app/controllers/phcmembers/member/addresses_controller.rb
646
+ - app/controllers/phcmembers/member/dashboards_controller.rb
660
647
  - app/controllers/phcmembers/member/listings_controller.rb
661
648
  - app/controllers/phcmembers/member/profiles_controller.rb
662
- - app/controllers/phcmembers/modules/dashboards_controller.rb
663
649
  - app/helpers/phcmembers/application_helper.rb
664
650
  - app/jobs/phcmembers/application_job.rb
665
651
  - app/mailers/phcmembers/application_mailer.rb
666
652
  - app/models/phcmembers/address_versions.rb
667
653
  - app/models/phcmembers/application_record.rb
668
- - app/models/phcmembers/category_listing_versions.rb
669
654
  - app/models/phcmembers/category_versions.rb
670
- - app/models/phcmembers/connections.rb
671
655
  - app/models/phcmembers/directory.rb
672
656
  - app/models/phcmembers/directory/category.rb
673
- - app/models/phcmembers/directory/categorylisting.rb
674
657
  - app/models/phcmembers/listing_versions.rb
675
658
  - app/models/phcmembers/member.rb
676
659
  - app/models/phcmembers/member/address.rb
@@ -682,21 +665,26 @@ files:
682
665
  - app/views/layouts/phcmembers/components/backend/footer/_footer.html.erb
683
666
  - app/views/layouts/phcmembers/components/backend/navigation/_top_menu.html.erb
684
667
  - app/views/layouts/phcmembers/components/backend/sidebars/_side_menu.html.erb
685
- - app/views/layouts/phcmembers/directory/directory_all.html.erb
686
- - app/views/layouts/phcmembers/members/members_all.html.erb
668
+ - app/views/layouts/phcmembers/components/frontend/footer/_footer.html.erb
669
+ - app/views/layouts/phcmembers/components/frontend/footer/_footer_copyright.html.erb
670
+ - app/views/layouts/phcmembers/components/frontend/header/_slideout.html.erb
671
+ - app/views/layouts/phcmembers/components/frontend/header/_topbar.html.erb
672
+ - app/views/layouts/phcmembers/components/frontend/navigation/_navigation.html.erb
673
+ - app/views/layouts/phcmembers/components/frontend/pages/_titlebars.html.erb
674
+ - app/views/layouts/phcmembers/components/frontend/seo/_seo_main.html.erb
675
+ - app/views/layouts/phcmembers/mailer.html.erb
676
+ - app/views/layouts/phcmembers/mailer.text.erb
677
+ - app/views/phcmembers/api/v1/categories/index.json.rabl
678
+ - app/views/phcmembers/api/v1/listings/index.json.rabl
687
679
  - app/views/phcmembers/directory/categories/_form.html.erb
688
680
  - app/views/phcmembers/directory/categories/components/_category_audits.html.erb
689
681
  - app/views/phcmembers/directory/categories/components/_category_list.html.erb
690
682
  - app/views/phcmembers/directory/categories/components/_category_main.html.erb
683
+ - app/views/phcmembers/directory/categories/components/_category_sidebar.html.erb
691
684
  - app/views/phcmembers/directory/categories/edit.html.erb
692
685
  - app/views/phcmembers/directory/categories/index.html.erb
693
686
  - app/views/phcmembers/directory/categories/new.html.erb
694
687
  - app/views/phcmembers/directory/categories/show.html.erb
695
- - app/views/phcmembers/directory/categorylistings/components/_category_listing_audits.html.erb
696
- - app/views/phcmembers/directory/categorylistings/components/_category_listing_list.html.erb
697
- - app/views/phcmembers/directory/categorylistings/components/_category_listing_main.html.erb
698
- - app/views/phcmembers/directory/categorylistings/index.html.erb
699
- - app/views/phcmembers/directory/categorylistings/show.html.erb
700
688
  - app/views/phcmembers/member/addresses/_form.html.erb
701
689
  - app/views/phcmembers/member/addresses/components/_address_audits_table.html.erb
702
690
  - app/views/phcmembers/member/addresses/components/_address_table.html.erb
@@ -704,6 +692,7 @@ files:
704
692
  - app/views/phcmembers/member/addresses/index.html.erb
705
693
  - app/views/phcmembers/member/addresses/new.html.erb
706
694
  - app/views/phcmembers/member/addresses/show.html.erb
695
+ - app/views/phcmembers/member/dashboards/index.html.erb
707
696
  - app/views/phcmembers/member/listings/_form.html.erb
708
697
  - app/views/phcmembers/member/listings/components/_listing_audits_table.html.erb
709
698
  - app/views/phcmembers/member/listings/components/_listing_table.html.erb
@@ -721,7 +710,6 @@ files:
721
710
  - app/views/phcmembers/member/profiles/index.html.erb
722
711
  - app/views/phcmembers/member/profiles/new.html.erb
723
712
  - app/views/phcmembers/member/profiles/show.html.erb
724
- - app/views/phcmembers/modules/dashboards/index.html.erb
725
713
  - config/routes.rb
726
714
  - db/migrate/20160728230720_create_phcmembers_directory_categories.rb
727
715
  - db/migrate/20160728230830_create_phcmembers_directory_categorylistings.rb
@@ -757,7 +745,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
757
745
  - !ruby/object:Gem::Version
758
746
  version: '0'
759
747
  requirements: []
760
- rubygems_version: 3.0.1
748
+ rubygems_version: 3.0.3
761
749
  signing_key:
762
750
  specification_version: 4
763
751
  summary: Rails 5.2 App Engine