spina_contact_forms 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.
Files changed (34) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +47 -0
  4. data/Rakefile +37 -0
  5. data/app/assets/config/spina_contact_forms_manifest.js +0 -0
  6. data/app/controllers/spina/admin/contact_form_elements_controller.rb +35 -0
  7. data/app/controllers/spina/admin/contact_forms_controller.rb +20 -0
  8. data/app/controllers/spina/contact_forms_controller.rb +9 -0
  9. data/app/helpers/spina_contact_forms/contact_forms_helper.rb +15 -0
  10. data/app/mailers/spina/contact_form_mailer.rb +11 -0
  11. data/app/models/application_record.rb +3 -0
  12. data/app/models/spina/contact_form_element.rb +13 -0
  13. data/app/models/spina.rb +5 -0
  14. data/app/views/layouts/mailers/spina_contact_form.html.erb +13 -0
  15. data/app/views/layouts/mailers/spina_contact_form.text.erb +1 -0
  16. data/app/views/spina/admin/contact_form_elements/_contact_form_element.html.haml +4 -0
  17. data/app/views/spina/admin/contact_form_elements/create.js.erb +2 -0
  18. data/app/views/spina/admin/contact_form_elements/error.js.erb +1 -0
  19. data/app/views/spina/admin/contact_forms/_form.html.haml +27 -0
  20. data/app/views/spina/admin/contact_forms/index.html.haml +17 -0
  21. data/app/views/spina/admin/hooks/contact_forms/_website_secondary_navigation.html.haml +3 -0
  22. data/app/views/spina/contact_form_mailer/send_form.html.haml +3 -0
  23. data/app/views/spina/contact_form_mailer/send_form.text.erb +4 -0
  24. data/app/views/spina/contact_forms/_page.html.haml +8 -0
  25. data/app/views/spina/contact_forms/create.js.erb +1 -0
  26. data/config/locales/contact_form_de.yml +3 -0
  27. data/config/locales/contact_form_en.yml +3 -0
  28. data/config/routes.rb +10 -0
  29. data/db/migrate/20170329144025_create_spina_contact_form_elements.rb +11 -0
  30. data/lib/spina_contact_forms/engine.rb +15 -0
  31. data/lib/spina_contact_forms/version.rb +3 -0
  32. data/lib/spina_contact_forms.rb +5 -0
  33. data/lib/tasks/spina_contact_forms_tasks.rake +4 -0
  34. metadata +118 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ce90c4eeae5bba5a1617cf63655b0bf7e8239b4e
4
+ data.tar.gz: bef83c4aabd8eecfc4884ccbee00bc24ffc203cd
5
+ SHA512:
6
+ metadata.gz: eb5758cde440fcca05cefb44f17dc704fe0511a622036a98f4116f63b50048c6a7394bea5a1862562b2cce2c200dc833e84b41d7218c0fdc5a796606a8e6a557
7
+ data.tar.gz: e2d35d4ea63ab29169de5986c46ac892a8467fc4bab517e2d68bb00bda6ccf79518f7409d1cd232c293dfbfd9db9566b34480cd8200c6ea1d4e38f7af16bd5c2
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2017 Adam Cooper
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # SpinaContactForms
2
+ This will add a contact form builder for spina. You can create form elements in the backend that will populate the form in the frontend.
3
+
4
+ ## Installation
5
+ Add this line to your application's Gemfile:
6
+
7
+ ```ruby
8
+ gem 'spina_contact_forms', git: 'https://github.com/acapro/Spina-Contact-Forms'
9
+ ```
10
+
11
+ And then execute:
12
+ ```bash
13
+ $ bundle
14
+ ```
15
+
16
+ Make sure your mail settings are setup correctly.
17
+
18
+ Add the following to `config/secrets.yml`
19
+ ```
20
+ contact_form_from_email: contact_form@yourdomain.com
21
+ ```
22
+
23
+ Add the following to your theme's config file (config/initializers/themes/theme_name.rb)
24
+ ```ruby
25
+ theme.plugins = ['ContactForm']
26
+ ```
27
+
28
+ Copy and run the migrations
29
+ ```bash
30
+ rake spina_contact_forms_engine:install:migrations
31
+ rake db:migrate
32
+ ```
33
+
34
+ ## Usage
35
+ In your view, call `<%= spina_contact_form%>`
36
+ That's it! Use Mailcatcher for local development, and test it out.
37
+
38
+ ## Contributing
39
+ Contributions are welcome! It is still in an early stage, and more features are required. Fork it, and create a pull request.
40
+
41
+ ## Roadmap
42
+ * Currently only text inputs and text areas are supported, select dropdowns, check boxes and radio buttons still needed
43
+ * Internationalization needed
44
+ * Create an install generator, which copies the migrations and view files
45
+
46
+ ## License
47
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'SpinaContactForms'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ require 'bundler/gem_tasks'
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+
37
+ task default: :test
File without changes
@@ -0,0 +1,35 @@
1
+ module Spina
2
+ module Admin
3
+ class ContactFormElementsController < AdminController
4
+ layout 'spina/admin/admin'
5
+
6
+ def error
7
+ end
8
+
9
+ def create
10
+ @contact_form_element = ContactFormElement.new(contact_form_element_params)
11
+ respond_to do |format|
12
+ if @contact_form_element.save
13
+ format.html {redirect_to admin_contact_forms_path, notice: 'Form Element was successfully created.'}
14
+ format.js
15
+ else
16
+ render :error
17
+ end
18
+ end
19
+ end
20
+
21
+ def update
22
+ end
23
+
24
+ def destroy
25
+ end
26
+
27
+ private
28
+
29
+ def contact_form_element_params
30
+ params.require(:contact_form_element).permit(:label, :required, :input_type)
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,20 @@
1
+ module Spina
2
+ module Admin
3
+ class ContactFormsController < AdminController
4
+ layout 'spina/admin/admin'
5
+
6
+ before_action :set_breadcrumb
7
+
8
+ def index
9
+ @contact_form_element = ContactFormElement.new
10
+ @contact_form_elements = ContactFormElement.all
11
+ end
12
+
13
+ private
14
+
15
+ def set_breadcrumb
16
+ add_breadcrumb t('plugins.ContactForm'), admin_contact_forms_path
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ module Spina
2
+ class ContactFormsController < ApplicationController
3
+
4
+ def create
5
+ @email_content = params.permit!.except(:utf8, :controller, :action)
6
+ Spina::ContactFormMailer.send_form(@email_content).deliver_now
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module SpinaContactForms
2
+ module ContactFormsHelper
3
+ def spina_contact_form
4
+ render :partial => 'spina/contact_forms/page', locals: {contact_form_elements: Spina::ContactFormElement.all }
5
+ end
6
+
7
+ def spina_contact_form_input(name, type)
8
+ if type == 'text_field'
9
+ text_field_tag name.parameterize
10
+ elsif type == 'text_area'
11
+ text_area_tag name.parameterize
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module Spina
2
+ class ContactFormMailer < ActionMailer::Base
3
+ default from: Rails.application.secrets
4
+ layout 'mailers/spina_contact_form'
5
+
6
+ def send_form(email_content)
7
+ @email_content = email_content
8
+ mail(to: 'adam@adamcooper.de', subject: 'From your Contact Form')
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ class ApplicationRecord < ActiveRecord::Base
2
+ self.abstract_class = true
3
+ end
@@ -0,0 +1,13 @@
1
+ # Database Entries
2
+ # :label -> String
3
+ # :required -> Boolean
4
+ # :input_type -> Integer
5
+
6
+
7
+ class Spina::ContactFormElement < ApplicationRecord
8
+ enum input_type: [:text_field, :text_area]
9
+
10
+ def required?
11
+ self.required
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module Spina
2
+ def self.table_name_prefix
3
+ 'spina_'
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <style>
6
+ /* Email styles need to be inline */
7
+ </style>
8
+ </head>
9
+
10
+ <body>
11
+ <%= yield %>
12
+ </body>
13
+ </html>
@@ -0,0 +1 @@
1
+ <%= yield %>
@@ -0,0 +1,4 @@
1
+ %tr
2
+ %td= element.label
3
+ %td= element.input_type
4
+ %td= element.required?
@@ -0,0 +1,2 @@
1
+ $('#contact_form_elements').append("<%= j render 'spina/admin/contact_form_elements/contact_form_element', element: @contact_form_element %>");
2
+ $('#contact_form_element_label').val('')
@@ -0,0 +1 @@
1
+ console.log('error!!!');
@@ -0,0 +1,27 @@
1
+ = form_for [spina, :admin, @contact_form_element], url: spina.admin_contact_form_elements_path, remote: true do |f|
2
+ .well
3
+ .horizontal-form
4
+ .horizontal-form-group
5
+ .horizontal-form-label
6
+ Form Label
7
+ .horizontal-form-content
8
+ = f.text_field :label, placeholder: 'Form Label'
9
+
10
+ .horizontal-form-group
11
+ .horizontal-form-label
12
+ Required?
13
+ %small Required
14
+ .horizontal-form-content
15
+ = f.check_box :required, data: {switch: 'true'}
16
+
17
+ .horizontal-form-group
18
+ .horizontal-form-label
19
+ Form Type
20
+ .horizontal-form-content
21
+ .select-dropdown
22
+ = f.collection_select :input_type, Spina::ContactFormElement.input_types.map{ |el| [el.first, el.first.humanize] }, :first, :second
23
+
24
+ .horizontal-form-group
25
+ %button.button.button-primary{type: 'submit'}
26
+ = icon('plus')
27
+ Add Form Element
@@ -0,0 +1,17 @@
1
+ %header#header
2
+ = render partial: 'spina/admin/shared/breadcrumbs'
3
+
4
+ = render 'form'
5
+
6
+ .well
7
+ .table-container
8
+ %table.table
9
+ %thead
10
+ %tr
11
+ %th Element Label
12
+ %th Element Type
13
+ %th Required Field?
14
+
15
+ %tbody#contact_form_elements
16
+ - @contact_form_elements.each do |element|
17
+ = render 'spina/admin/contact_form_elements/contact_form_element', element: element
@@ -0,0 +1,3 @@
1
+ %li{ class: ('active' if current_admin_path.start_with?('/contact_forms')) }
2
+ = link_to spina.admin_contact_forms_path do
3
+ = t("contact_form.menu_title")
@@ -0,0 +1,3 @@
1
+ - @email_content.each do |key, value|
2
+ %h3= key
3
+ %p= value
@@ -0,0 +1,4 @@
1
+ <% @email_content.each do |key, value| %>
2
+ <%= key %>
3
+ <%= value %>
4
+ <% end %>
@@ -0,0 +1,8 @@
1
+ = form_tag contact_forms_path, remote: true, id: 'spina_contact_form' do
2
+ - contact_form_elements.each do |element|
3
+ %label
4
+ - if element.required?
5
+ *
6
+ = element.label
7
+ = spina_contact_form_input(element.label, element.input_type)
8
+ %button{type: 'submit'} Send
@@ -0,0 +1 @@
1
+ console.log('yeah!');
@@ -0,0 +1,3 @@
1
+ de:
2
+ contact_form:
3
+ menu_title: 'Kontakt Formular'
@@ -0,0 +1,3 @@
1
+ en:
2
+ contact_form:
3
+ menu_title: 'Contact Form'
data/config/routes.rb ADDED
@@ -0,0 +1,10 @@
1
+ Spina::Engine.routes.draw do
2
+
3
+ namespace :admin, path: Spina.config.backend_path do
4
+ resources :contact_forms, only: [:index]
5
+ resources :contact_form_elements, except: [:show, :index]
6
+ end
7
+
8
+ resources :contact_forms, only: [:create]
9
+
10
+ end
@@ -0,0 +1,11 @@
1
+ class CreateSpinaContactFormElements < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :spina_contact_form_elements do |t|
4
+ t.string :label
5
+ t.boolean :required
6
+ t.integer :input_type
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module SpinaContactForms
2
+ class Engine < ::Rails::Engine
3
+ initializer 'spina.plugin.register.events', before: :load_config_initializers do
4
+ ::Spina::Plugin.register do |plugin|
5
+ plugin.name = 'ContactForm'
6
+ plugin.namespace = 'contact_forms'
7
+ end
8
+ end
9
+ initializer 'spina.action_controller' do |app|
10
+ ActiveSupport.on_load :action_controller do
11
+ helper SpinaContactForms::ContactFormsHelper
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module SpinaContactForms
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,5 @@
1
+ require "spina_contact_forms/engine"
2
+
3
+ module SpinaContactForms
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :spina_contact_forms do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spina_contact_forms
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Cooper
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 5.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: spina
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Adds a contact form to Spina
56
+ email:
57
+ - mail@adamcooper.de
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - MIT-LICENSE
63
+ - README.md
64
+ - Rakefile
65
+ - app/assets/config/spina_contact_forms_manifest.js
66
+ - app/controllers/spina/admin/contact_form_elements_controller.rb
67
+ - app/controllers/spina/admin/contact_forms_controller.rb
68
+ - app/controllers/spina/contact_forms_controller.rb
69
+ - app/helpers/spina_contact_forms/contact_forms_helper.rb
70
+ - app/mailers/spina/contact_form_mailer.rb
71
+ - app/models/application_record.rb
72
+ - app/models/spina.rb
73
+ - app/models/spina/contact_form_element.rb
74
+ - app/views/layouts/mailers/spina_contact_form.html.erb
75
+ - app/views/layouts/mailers/spina_contact_form.text.erb
76
+ - app/views/spina/admin/contact_form_elements/_contact_form_element.html.haml
77
+ - app/views/spina/admin/contact_form_elements/create.js.erb
78
+ - app/views/spina/admin/contact_form_elements/error.js.erb
79
+ - app/views/spina/admin/contact_forms/_form.html.haml
80
+ - app/views/spina/admin/contact_forms/index.html.haml
81
+ - app/views/spina/admin/hooks/contact_forms/_website_secondary_navigation.html.haml
82
+ - app/views/spina/contact_form_mailer/send_form.html.haml
83
+ - app/views/spina/contact_form_mailer/send_form.text.erb
84
+ - app/views/spina/contact_forms/_page.html.haml
85
+ - app/views/spina/contact_forms/create.js.erb
86
+ - config/locales/contact_form_de.yml
87
+ - config/locales/contact_form_en.yml
88
+ - config/routes.rb
89
+ - db/migrate/20170329144025_create_spina_contact_form_elements.rb
90
+ - lib/spina_contact_forms.rb
91
+ - lib/spina_contact_forms/engine.rb
92
+ - lib/spina_contact_forms/version.rb
93
+ - lib/tasks/spina_contact_forms_tasks.rake
94
+ homepage: http://www.github.com/acapro
95
+ licenses:
96
+ - MIT
97
+ metadata: {}
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.4.5.1
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: Spina contact form plugin
118
+ test_files: []