refinerycms-contacts 0.1.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/Gemfile +73 -0
- data/Guardfile +27 -0
- data/LICENSE.md +8 -0
- data/Rakefile +20 -0
- data/app/assets/javascripts/refinery/contacts/admin/contacts.js +17 -0
- data/app/assets/javascripts/refinery/contacts/admin/jquery.chosen.min.js +10 -0
- data/app/assets/javascripts/refinery/contacts/contacts.js +23 -0
- data/app/assets/stylesheets/refinery/contacts/admin/chosen.css.scss +396 -0
- data/app/assets/stylesheets/refinery/contacts/contacts.css.scss +79 -0
- data/app/controllers/refinery/contacts/admin/contacts_controller.rb +14 -0
- data/app/controllers/refinery/contacts/mail_messages_controller.rb +26 -0
- data/app/helpers/refinery/contacts/admin/contacts_helper.rb +18 -0
- data/app/mailers/refinery/contacts/contact_mailer.rb +15 -0
- data/app/models/refinery/contact_page.rb +11 -0
- data/app/models/refinery/contacts/contact.rb +18 -0
- data/app/models/refinery/contacts/mail.rb +13 -0
- data/app/models/refinery/contacts/mail_message.rb +15 -0
- data/app/models/refinery/contacts/table_less_model.rb +23 -0
- data/app/sweepers/refinery/contacts/admin/contact_sweeper.rb +22 -0
- data/app/views/refinery/admin/pages/tabs/contacts/_contacts.html.erb +12 -0
- data/app/views/refinery/admin/pages/tabs/contacts/_contacts_bar.html.erb +4 -0
- data/app/views/refinery/admin/pages/tabs/contacts/_form.html.erb +24 -0
- data/app/views/refinery/contacts/admin/contacts/_actions.html.erb +25 -0
- data/app/views/refinery/contacts/admin/contacts/_contact.html.erb +17 -0
- data/app/views/refinery/contacts/admin/contacts/_contacts.html.erb +2 -0
- data/app/views/refinery/contacts/admin/contacts/_form.html.erb +93 -0
- data/app/views/refinery/contacts/admin/contacts/_mail_fields.html.erb +7 -0
- data/app/views/refinery/contacts/admin/contacts/_records.html.erb +18 -0
- data/app/views/refinery/contacts/admin/contacts/_sortable_list.html.erb +5 -0
- data/app/views/refinery/contacts/admin/contacts/edit.html.erb +1 -0
- data/app/views/refinery/contacts/admin/contacts/index.html.erb +7 -0
- data/app/views/refinery/contacts/admin/contacts/new.html.erb +1 -0
- data/app/views/refinery/contacts/contact_mailer/contact_form.html.erb +1 -0
- data/app/views/refinery/contacts/contact_mailer/contact_form.text.erb +1 -0
- data/app/views/refinery/contacts/contacts/_error_info.html.erb +15 -0
- data/app/views/refinery/contacts/contacts/_form.html.erb +47 -0
- data/app/views/refinery/contacts/contacts/_show.html.erb +50 -0
- data/app/views/refinery/contacts/contacts/_success_info.html.erb +8 -0
- data/changelog.md +2 -0
- data/config/initializers/recaptcha.rb +5 -0
- data/config/initializers/refinery/core.rb +4 -0
- data/config/locales/en.yml +80 -0
- data/config/locales/sk.yml +80 -0
- data/config/routes.rb +23 -0
- data/db/migrate/1_create_contacts_contacts.rb +36 -0
- data/db/migrate/2_create_contacts_mails.rb +17 -0
- data/db/migrate/3_create_contact_pages.rb +20 -0
- data/db/migrate/4_add_homepage_to_contacts.rb +11 -0
- data/db/seeds.rb +13 -0
- data/lib/generators/refinery/contacts_generator.rb +28 -0
- data/lib/generators/refinery/templates/config/initializers/recaptcha.rb.erb +7 -0
- data/lib/generators/refinery/templates/config/initializers/refinery/contacts.rb.erb +4 -0
- data/lib/refinery/contacts.rb +23 -0
- data/lib/refinery/contacts/configuration.rb +10 -0
- data/lib/refinery/contacts/engine.rb +44 -0
- data/lib/refinery/contacts/extensions/pages_extension.rb +40 -0
- data/lib/refinery/contacts/version.rb +17 -0
- data/lib/refinerycms-contacts.rb +1 -0
- data/lib/tasks/refinery/contacts.rake +13 -0
- data/readme.md +170 -0
- data/refinerycms-contacts.gemspec +27 -0
- data/script/rails +10 -0
- data/spec/models/refinery/contacts/contact_spec.rb +18 -0
- data/spec/models/refinery/contacts/mail_spec.rb +18 -0
- data/spec/requests/refinery/contacts/admin/contacts_spec.rb +101 -0
- data/spec/requests/refinery/contacts/admin/mails_spec.rb +101 -0
- data/spec/spec_helper.rb +55 -0
- data/spec/support/factories/refinery/contacts.rb +7 -0
- data/spec/support/factories/refinery/mails.rb +7 -0
- data/tasks/rspec.rake +6 -0
- data/tasks/testing.rake +8 -0
- metadata +147 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
class CreateContactPages < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def up
|
4
|
+
create_table :refinery_contact_pages do |t|
|
5
|
+
t.integer :contact_id
|
6
|
+
t.integer :page_id
|
7
|
+
t.string :page_type, :default => "Refinery::Page"
|
8
|
+
t.boolean :contact_info, :default=> false
|
9
|
+
end
|
10
|
+
|
11
|
+
add_index :refinery_contact_pages, :contact_id
|
12
|
+
add_index :refinery_contact_pages, :page_id
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
def down
|
17
|
+
drop_table :refinery_contact_pages
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/db/seeds.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
(Refinery.i18n_enabled? ? Refinery::I18n.frontend_locales : [:en]).each do |lang|
|
2
|
+
I18n.locale = lang
|
3
|
+
|
4
|
+
if defined?(Refinery::User)
|
5
|
+
Refinery::User.all.each do |user|
|
6
|
+
if user.plugins.where(:name => 'refinerycms-contacts').blank?
|
7
|
+
user.plugins.create(:name => 'refinerycms-contacts',
|
8
|
+
:position => (user.plugins.maximum(:position) || -1) +1)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Refinery
|
2
|
+
class ContactsGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('../templates', __FILE__)
|
4
|
+
|
5
|
+
def generate_recaptcha_template
|
6
|
+
template 'config/initializers/recaptcha.rb.erb', File.join(destination_root, 'config', 'initializers', 'recaptcha.rb')
|
7
|
+
end
|
8
|
+
|
9
|
+
def generate_contacts_template
|
10
|
+
template 'config/initializers/refinery/contacts.rb.erb', File.join(destination_root, 'config', 'initializers', 'refinery', 'contacts.rb')
|
11
|
+
end
|
12
|
+
|
13
|
+
def rake_db
|
14
|
+
rake("refinery_contacts:install:migrations")
|
15
|
+
end
|
16
|
+
|
17
|
+
def append_load_seed_data
|
18
|
+
create_file 'db/seeds.rb' unless File.exists?(File.join(destination_root, 'db', 'seeds.rb'))
|
19
|
+
append_file 'db/seeds.rb', :verbose => true do
|
20
|
+
<<-EOH
|
21
|
+
|
22
|
+
# Added by Refinery CMS Contacts extension
|
23
|
+
Refinery::Contacts::Engine.load_seed
|
24
|
+
EOH
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,4 @@
|
|
1
|
+
Refinery::Contacts.configure do |config|
|
2
|
+
# Set to true, if you want to use gem client_side_validations. After that you need to correctly setup gem client_side_validations as it is written in Readme of this gem
|
3
|
+
# config.client_side_validations = <%= Refinery::Contacts.client_side_validations.inspect %>
|
4
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'refinerycms-core'
|
2
|
+
|
3
|
+
module Refinery
|
4
|
+
autoload :ContactsGenerator, 'generators/refinery/contacts_generator'
|
5
|
+
|
6
|
+
module Contacts
|
7
|
+
class << self
|
8
|
+
attr_writer :root
|
9
|
+
|
10
|
+
def root
|
11
|
+
@root ||= Pathname.new(File.expand_path('../../../', __FILE__))
|
12
|
+
end
|
13
|
+
|
14
|
+
def factory_paths
|
15
|
+
@factory_paths ||= [ root.join('spec', 'factories').to_s ]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
require 'refinery/contacts/engine'
|
20
|
+
require 'refinery/contacts/configuration'
|
21
|
+
require 'refinery/contacts/extensions/pages_extension'
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Contacts
|
3
|
+
class Engine < Rails::Engine
|
4
|
+
include Refinery::Engine
|
5
|
+
isolate_namespace Refinery::Contacts
|
6
|
+
|
7
|
+
engine_name :refinery_contacts
|
8
|
+
|
9
|
+
def self.register(tab)
|
10
|
+
tab.name = tab.name = ::I18n.t(:'refinery.plugins.contacts.tab_name')
|
11
|
+
tab.partial = "/refinery/admin/pages/tabs/contacts/contacts"
|
12
|
+
end
|
13
|
+
|
14
|
+
initializer "register refinerycms_contacts plugin" do
|
15
|
+
Refinery::Plugin.register do |plugin|
|
16
|
+
plugin.name = "contacts"
|
17
|
+
plugin.url = proc { Refinery::Core::Engine.routes.url_helpers.contacts_admin_contacts_path }
|
18
|
+
plugin.pathname = root
|
19
|
+
plugin.activity = {
|
20
|
+
:class_name => :'refinery/contacts/contact'
|
21
|
+
}
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
config.to_prepare do
|
27
|
+
require 'refinerycms-pages'
|
28
|
+
Refinery::Page.send :has_one_contact
|
29
|
+
end
|
30
|
+
|
31
|
+
config.before_initialize do
|
32
|
+
require 'recaptcha/rails'
|
33
|
+
end
|
34
|
+
|
35
|
+
config.after_initialize do
|
36
|
+
Refinery::Pages::Tab.register do |tab|
|
37
|
+
register tab
|
38
|
+
end
|
39
|
+
Refinery.register_extension(Refinery::Contacts)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Contacts
|
3
|
+
module Extensions
|
4
|
+
module Pages
|
5
|
+
def has_one_contact
|
6
|
+
has_one :contact_page, :as => :page, :dependent=> :destroy
|
7
|
+
has_one :contact, :through => :contact_page
|
8
|
+
has_many :mails, :class_name => Refinery::Contacts::Mail, :through => :contact
|
9
|
+
|
10
|
+
|
11
|
+
accepts_nested_attributes_for :contact_page
|
12
|
+
|
13
|
+
module_eval do
|
14
|
+
def contact_page=(contact_page_params)
|
15
|
+
# new
|
16
|
+
if self.contact_page.nil?
|
17
|
+
self.build_contact_page
|
18
|
+
end
|
19
|
+
|
20
|
+
# destroy
|
21
|
+
if contact_page_params[:contact_id].blank?
|
22
|
+
self.contact_page.destroy
|
23
|
+
|
24
|
+
# create or update if changed
|
25
|
+
elsif (self.contact_page.contact_id.to_s != contact_page_params[:contact_id]) || (self.contact_page.contact_info != contact_page_params[:contact_info] )
|
26
|
+
self.contact_page.update_attributes( contact_page_params)
|
27
|
+
self.contact_page.save
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
attr_accessible :contact_page
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
ActiveRecord::Base.send(:extend, Refinery::Contacts::Extensions::Pages)
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'refinery/contacts'
|
data/readme.md
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
# Refinery CMS Contacts
|
2
|
+
|
3
|
+
__Contacts engine for Refinery CMS.__
|
4
|
+
|
5
|
+
Attach contact form to any page with contact information
|
6
|
+
|
7
|
+
## Requirements
|
8
|
+
|
9
|
+
This version supports Rails 3.2.x and Refinery CMS ~> 2.0.9. (Should work with ~> 2.0.0, not tested)
|
10
|
+
|
11
|
+
## Features
|
12
|
+
|
13
|
+
* create contact, contact has many email address
|
14
|
+
* contact can be attached to many pages
|
15
|
+
* rendering contact form with contact info ( optional )
|
16
|
+
* send email
|
17
|
+
* server side validation, client side validation ( optional )
|
18
|
+
* recaptcha
|
19
|
+
|
20
|
+
|
21
|
+
## Screenshots
|
22
|
+
|
23
|
+
All screenshots are in [branch screenshots](https://github.com/Matho/refinerycms-contacts/tree/screenshots)
|
24
|
+
|
25
|
+

|
26
|
+

|
27
|
+

|
28
|
+
|
29
|
+
## Language
|
30
|
+
|
31
|
+
Gem is translated to slovak and english.
|
32
|
+
|
33
|
+
|
34
|
+
## Installation
|
35
|
+
### Gem + migrations
|
36
|
+
|
37
|
+
Open up your ``Gemfile`` and add at the bottom this line:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
gem 'refinerycms-contacts', '~> 0.1.0'
|
41
|
+
```
|
42
|
+
|
43
|
+
Now, run
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
bundle install
|
47
|
+
```
|
48
|
+
|
49
|
+
Next, to install run:
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
rails g refinery:contacts
|
53
|
+
```
|
54
|
+
|
55
|
+
Run database migrations:
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
rake db:migrate
|
59
|
+
```
|
60
|
+
|
61
|
+
Seed your database:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
rake db:seed
|
65
|
+
```
|
66
|
+
|
67
|
+
### Assets + views
|
68
|
+
|
69
|
+
If you don't have Chosen JS included in your backend yet, append this code to your_app/config/initializers/refinery/core.rb
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
config.register_javascript "refinery/contacts/admin/jquery.chosen.min.js"
|
73
|
+
config.register_stylesheet "refinery/contacts/admin/chosen.css"
|
74
|
+
```
|
75
|
+
|
76
|
+
To ``view/refinery/pages/show.html.erb`` add ``<%= render "/refinery/contacts/contacts/show" %>``
|
77
|
+
|
78
|
+
To your app stylesheet manifest add ``*= require refinery/contacts/contacts``
|
79
|
+
To your app javascript manifest add ``//= require refinery/contacts/contacts``
|
80
|
+
|
81
|
+
### reCaptcha
|
82
|
+
|
83
|
+
Register your reCaptcha code at http://www.google.com/recaptcha/whyrecaptcha and set-up it in ``config/initializers/recaptcha.rb``
|
84
|
+
If you want, add that initializer file to .gitignore or rewrite it to use ENV variables from gitignored YAML file
|
85
|
+
|
86
|
+
### Send mail testing
|
87
|
+
|
88
|
+
If you want to test mail sending in development I recommend to use gem letter_opener.
|
89
|
+
In ``app/config/environments/development.rb`` add these lines:
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
config.action_mailer.delivery_method = :letter_opener
|
93
|
+
config.action_mailer.raise_delivery_errors = true
|
94
|
+
```
|
95
|
+
If you have set-up ActionMailer::Base.smtp_settings block for development mode, comment it.
|
96
|
+
|
97
|
+
### Configure mailers
|
98
|
+
|
99
|
+
You can override mailer views from folder ``views/refinery/contacts/contact_mailer`` and edit.
|
100
|
+
|
101
|
+
### Client side validations
|
102
|
+
|
103
|
+
Client side validations gem is not installed by default by refinerycms-contacts gem! You need to install it:
|
104
|
+
|
105
|
+
Include ClientSideValidations in your Gemfile
|
106
|
+
```ruby
|
107
|
+
gem 'client_side_validations', '~> 3.2.1'
|
108
|
+
```
|
109
|
+
|
110
|
+
Then run the install generator
|
111
|
+
```ruby
|
112
|
+
rails g client_side_validations:install
|
113
|
+
```
|
114
|
+
|
115
|
+
This will install the initializer:
|
116
|
+
```
|
117
|
+
config/initializers/client_side_validations.rb
|
118
|
+
```
|
119
|
+
**ATTENTION!!!**
|
120
|
+
|
121
|
+
Because of [some issues](https://github.com/refinery/refinerycms/issues/961#issuecomment-4594545) we must
|
122
|
+
delete that initializer and write this code into file ``config/application.rb`` :
|
123
|
+
```ruby
|
124
|
+
config.to_prepare do
|
125
|
+
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
|
126
|
+
unless html_tag =~ /^<label/
|
127
|
+
%{<div class="field_with_errors">#{html_tag}<label for="#{instance.send(:tag_id)}" class="message">#{instance.error_message.first}</label></div>}.html_safe
|
128
|
+
else
|
129
|
+
%{<div class="field_with_errors">#{html_tag}</div>}.html_safe
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
```
|
134
|
+
|
135
|
+
Add JS to your manifest:
|
136
|
+
```ruby
|
137
|
+
//= require rails.validations
|
138
|
+
```
|
139
|
+
In file ``config/initializers/refinery/contacts.rb `` set client_side_validations to true to don't show server-side validation error in errorExplanations div
|
140
|
+
```ruby
|
141
|
+
config.client_side_validations = true
|
142
|
+
```
|
143
|
+
### Precompile assets
|
144
|
+
|
145
|
+
Before production, don't forget to precompile assets by:
|
146
|
+
|
147
|
+
```ruby
|
148
|
+
rake assets:precompile
|
149
|
+
```
|
150
|
+
|
151
|
+
## Todo list
|
152
|
+
|
153
|
+
* add js pop-up in page's tab to allow create contact "in-place" instead of clicking through menu
|
154
|
+
* tests :(
|
155
|
+
|
156
|
+
## Code
|
157
|
+
|
158
|
+
[](https://codeclimate.com/github/Matho/refinerycms-contacts)
|
159
|
+
|
160
|
+
## Known bugs
|
161
|
+
|
162
|
+
* WymEditor tab name don't show title in correct current_locale
|
163
|
+
* reCaptcha validation shows errors both for incorrect-captcha-sol and verification_failed key
|
164
|
+
|
165
|
+
## Testing
|
166
|
+
TODO
|
167
|
+
|
168
|
+
## License
|
169
|
+
|
170
|
+
Refinery CMS Contacts engine is released under the MIT license. Created by Martin Markech
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'refinery/contacts/version'
|
4
|
+
|
5
|
+
version = Refinery::Contacts::Version.to_s
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.name = 'refinerycms-contacts'
|
10
|
+
s.version = version
|
11
|
+
s.description = 'Ruby on Rails Contacts extension for Refinery CMS'
|
12
|
+
s.summary = 'Attach contact form to any page in Refinery CMS'
|
13
|
+
s.email = %q{martin.markech@matho.sk}
|
14
|
+
s.homepage = %q{http://github.com/Matho/refinerycms-contacts}
|
15
|
+
s.authors = 'Martin Markech'
|
16
|
+
s.require_paths = %w(lib)
|
17
|
+
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
#s.test_files = `git ls-files -- spec/*`.split("\n")
|
20
|
+
|
21
|
+
# Runtime dependencies
|
22
|
+
s.add_dependency 'refinerycms-core', '~> 2.0.9' # should work ~> 2.0.0 , not tested
|
23
|
+
s.add_dependency 'recaptcha'
|
24
|
+
|
25
|
+
# Development dependencies (usually used for testing)
|
26
|
+
# s.add_development_dependency 'refinerycms-testing', '~> 2.0.9'
|
27
|
+
end
|