tkh_content 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +11 -0
- data/README.md +1 -1
- data/app/controllers/contacts_controller.rb +54 -0
- data/app/mailers/contact_mailer.rb +18 -0
- data/app/models/contact.rb +16 -0
- data/app/views/contact_mailer/message_from_contact_form.text.erb +9 -0
- data/app/views/contacts/_form.html.erb +14 -0
- data/app/views/contacts/index.html.erb +29 -0
- data/app/views/pages/_form.html.erb +1 -1
- data/app/views/pages/index.html.erb +1 -1
- data/app/views/pages/show.html.erb +3 -0
- data/config/routes.rb +1 -0
- data/lib/generators/tkh_content/create_or_update_locales/templates/de.yml +13 -1
- data/lib/generators/tkh_content/create_or_update_locales/templates/en.yml +21 -0
- data/lib/generators/tkh_content/create_or_update_locales/templates/es.yml +11 -1
- data/lib/generators/tkh_content/create_or_update_locales/templates/fr.yml +17 -5
- data/lib/generators/tkh_content/create_or_update_migrations/create_or_update_migrations_generator.rb +1 -0
- data/lib/generators/tkh_content/create_or_update_migrations/templates/create_contacts.rb +19 -0
- data/lib/tkh_content/version.rb +1 -1
- metadata +11 -20
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
class ContactsController < ApplicationController
|
2
|
+
|
3
|
+
before_filter :authenticate, :except => 'create'
|
4
|
+
before_filter :authenticate_with_admin, :except => 'create'
|
5
|
+
|
6
|
+
def index
|
7
|
+
@contacts = Contact.by_recent.paginate(:page => params[:page], :per_page => 35)
|
8
|
+
switch_to_admin_layout
|
9
|
+
end
|
10
|
+
|
11
|
+
def create
|
12
|
+
@contact = Contact.new(params[:contact])
|
13
|
+
saved = @contact.save
|
14
|
+
sent_email = send_message_to_admin(@contact)
|
15
|
+
|
16
|
+
if saved && sent_email == 'success'
|
17
|
+
redirect_to root_path, notice: "Your message has been sent. Thank you very much!"
|
18
|
+
elsif saved && sent_email == 'exception'
|
19
|
+
flash[:error] = 'There was a problem sending this message'
|
20
|
+
redirect_to :back
|
21
|
+
elsif saved && sent_email == 'invalid'
|
22
|
+
flash[:error] = 'There was a problem sending this message. Your email address does not seem to be valid!'
|
23
|
+
redirect_to :back
|
24
|
+
else
|
25
|
+
flash[:error] = 'Something went wrong. Your message did not reach the intended recipient.'
|
26
|
+
redirect_to :back
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def valid_email?(string)
|
31
|
+
(!string.blank? && string =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i) ? true : false
|
32
|
+
end
|
33
|
+
# helper_method :valid_email?
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def send_message_to_admin(contact)
|
38
|
+
# check email validity
|
39
|
+
if valid_email?(contact.sender_email)
|
40
|
+
# Actually send the email to the student
|
41
|
+
begin
|
42
|
+
ContactMailer.message_from_contact_form(contact).deliver
|
43
|
+
return 'success'
|
44
|
+
rescue Exception => e
|
45
|
+
# AdminMailer.rescued_exceptions(e, "Some exception occurred while trying to send a student his confirmation for registering in a course. The email was never sent!").deliver
|
46
|
+
return 'exception'
|
47
|
+
end
|
48
|
+
else # for invalid or blank emails
|
49
|
+
return 'invalid'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class ContactMailer < ActionMailer::Base
|
2
|
+
|
3
|
+
# default :from => "info@yoga.lu"
|
4
|
+
|
5
|
+
# Subject can be set in your I18n file at config/locales/en.yml
|
6
|
+
# with the following lookup:
|
7
|
+
#
|
8
|
+
# en.user_mailer.password_reset.subject
|
9
|
+
#
|
10
|
+
def message_from_contact_form(contact)
|
11
|
+
@contact = contact
|
12
|
+
# FIXME - only the email addresses show up. not the names :-(
|
13
|
+
# TODO - what do to if contact_email is not set?
|
14
|
+
recipient = "#{Setting.first.company_name} <#{Setting.first.contact_email}>"
|
15
|
+
from = "#{@contact.sender_name} <#{@contact.sender_email}>"
|
16
|
+
mail to: recipient, from: from , subject: 'Message from the contact form'
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# this is needed for now to make mass assignment security compatible with the translation of globalize3
|
2
|
+
Globalize::ActiveRecord::Translation.class_eval do
|
3
|
+
attr_accessible :locale
|
4
|
+
end
|
5
|
+
|
6
|
+
class Contact < ActiveRecord::Base
|
7
|
+
|
8
|
+
attr_accessible :sender_name, :sender_email, :body
|
9
|
+
|
10
|
+
validates_presence_of :sender_name
|
11
|
+
validates :sender_email, :presence => true, :format => { :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :on => :create }
|
12
|
+
validates_presence_of :body
|
13
|
+
|
14
|
+
scope :by_recent, order('updated_at desc')
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= simple_form_for Contact.new, :html => { class: 'form-horizontal' } do |f| %>
|
2
|
+
<%= f.error_notification %>
|
3
|
+
|
4
|
+
<div class="form-inputs">
|
5
|
+
<%= f.input :sender_name %>
|
6
|
+
<%= f.input :sender_email %>
|
7
|
+
<%= f.input :body, :input_html => { :rows => 10 } %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="form-actions">
|
11
|
+
<%= f.button :submit, :class => 'btn btn-primary', label: 'send your message' %>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<% end %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<h1><%= t 'contacts.index.title' %></h1>
|
2
|
+
|
3
|
+
<table class='table table-striped'>
|
4
|
+
<thead>
|
5
|
+
<tr>
|
6
|
+
<th><%= t 'activerecord.attributes.contacts.sender_name' %></th>
|
7
|
+
<th><%= t 'activerecord.attributes.contacts.sender_email' %></th>
|
8
|
+
<th><%= t 'activerecord.attributes.contacts.body' %></th>
|
9
|
+
<th><%= t 'contacts.sent' %></th>
|
10
|
+
<th>Actions</th>
|
11
|
+
</tr>
|
12
|
+
</thead>
|
13
|
+
|
14
|
+
<tbody>
|
15
|
+
<% @contacts.each do |contact| %>
|
16
|
+
<tr>
|
17
|
+
<td><%= contact.sender_name %></td>
|
18
|
+
<td><%= mail_to contact.sender_email, contact.sender_name, subject: 'Response to your message' %></td>
|
19
|
+
<td><%= truncate contact.body, length: 55, separator: ' ...' %></td>
|
20
|
+
<td><%= l contact.created_at, :format => :default %></td>
|
21
|
+
<td>Reply to email: <%= mail_to contact.sender_email, contact.sender_name, subject: 'Response to your message' %></td>
|
22
|
+
</tr>
|
23
|
+
<% end %>
|
24
|
+
</tbody>
|
25
|
+
</table>
|
26
|
+
|
27
|
+
<%= will_paginate @contacts %>
|
28
|
+
|
29
|
+
<%= render 'shared/admin_sidebar' %>
|
@@ -14,7 +14,7 @@
|
|
14
14
|
source: Page.not_for_blog.by_title.map(&:title).to_json }
|
15
15
|
} %>
|
16
16
|
<%= f.input :description, :input_html => { :rows => 3 } %>
|
17
|
-
<%= f.input :body, :input_html => { :rows =>
|
17
|
+
<%= f.input :body, :input_html => { :rows => 35 } %>
|
18
18
|
</div>
|
19
19
|
|
20
20
|
<div class="form-actions">
|
data/config/routes.rb
CHANGED
@@ -14,6 +14,11 @@ de:
|
|
14
14
|
description: "Beschreibung"
|
15
15
|
body: "Haupttext"
|
16
16
|
for_the_blog: 'Für den Blog'
|
17
|
+
|
18
|
+
contacts:
|
19
|
+
sender_name: "sender name"
|
20
|
+
sender_email: 'sender email'
|
21
|
+
body: 'message'
|
17
22
|
|
18
23
|
pages:
|
19
24
|
author: 'Autor'
|
@@ -28,4 +33,11 @@ de:
|
|
28
33
|
warning: 'Beim Speichern der Seite ist ein Problem aufgetreten'
|
29
34
|
destroy:
|
30
35
|
notice: 'Die Seite wurde gelöscht'
|
31
|
-
root_warning: "Du kannst diese Seite nicht löschen, da es die Root-Seite ist. Du kannst sie nur bearbeiten."
|
36
|
+
root_warning: "Du kannst diese Seite nicht löschen, da es die Root-Seite ist. Du kannst sie nur bearbeiten."
|
37
|
+
|
38
|
+
contacts:
|
39
|
+
sent: 'Sent at'
|
40
|
+
|
41
|
+
create:
|
42
|
+
notice: 'Your message has been sent'
|
43
|
+
warning: 'There was a problem sending your message.'
|
@@ -1,5 +1,19 @@
|
|
1
1
|
en:
|
2
2
|
|
3
|
+
activerecord:
|
4
|
+
attributes:
|
5
|
+
pages:
|
6
|
+
title: "title"
|
7
|
+
short_title: 'short title'
|
8
|
+
description: "description"
|
9
|
+
body: "body text"
|
10
|
+
for_the_blog: 'for the blog'
|
11
|
+
|
12
|
+
contacts:
|
13
|
+
sender_name: "sender name"
|
14
|
+
sender_email: 'sender email'
|
15
|
+
body: 'message'
|
16
|
+
|
3
17
|
are_you_sure: 'are you sure?'
|
4
18
|
delete: 'delete'
|
5
19
|
edit: 'edit'
|
@@ -20,3 +34,10 @@ en:
|
|
20
34
|
destroy:
|
21
35
|
notice: 'The page was deleted'
|
22
36
|
root_warning: "You cannot delete this page as this is the root page of the site. You should only modify it."
|
37
|
+
|
38
|
+
contacts:
|
39
|
+
sent: 'Sent at'
|
40
|
+
|
41
|
+
create:
|
42
|
+
notice: 'Your message has been sent'
|
43
|
+
warning: 'There was a problem sending your message.'
|
@@ -14,6 +14,11 @@ es:
|
|
14
14
|
description: "descripción"
|
15
15
|
body: "parte principal"
|
16
16
|
for_the_blog: 'contraseña'
|
17
|
+
|
18
|
+
contacts:
|
19
|
+
sender_name: "nombre del remitente"
|
20
|
+
sender_email: 'correo electrónico del remitente'
|
21
|
+
body: 'mensaje'
|
17
22
|
|
18
23
|
pages:
|
19
24
|
author: 'autor'
|
@@ -30,4 +35,9 @@ es:
|
|
30
35
|
notice: 'la página se ha eliminado'
|
31
36
|
root_warning: "No se puede eliminar la página, ya que es la bienvenida principal. Por favor, cámbialo."
|
32
37
|
|
33
|
-
|
38
|
+
contacts:
|
39
|
+
sent: 'Enviado a las'
|
40
|
+
|
41
|
+
create:
|
42
|
+
notice: 'Tu mensaje ha sido enviado.'
|
43
|
+
warning: 'Hubo un problema al enviar su mensaje.'
|
@@ -14,6 +14,11 @@ fr:
|
|
14
14
|
description: "description"
|
15
15
|
body: "texte principal"
|
16
16
|
for_the_blog: 'pour le blog'
|
17
|
+
|
18
|
+
contacts:
|
19
|
+
sender_name: "nom de l'auteur"
|
20
|
+
sender_email: "email de l'auteur"
|
21
|
+
body: 'contenu du message'
|
17
22
|
|
18
23
|
pages:
|
19
24
|
author: 'auteur'
|
@@ -22,10 +27,17 @@ fr:
|
|
22
27
|
|
23
28
|
create:
|
24
29
|
notice: 'La page a été créée.'
|
25
|
-
warning: "Il y'a eu un probleme et la page n'a pas été sauvegardée"
|
30
|
+
warning: "Il y'a eu un probleme et la page n'a pas été sauvegardée."
|
26
31
|
update:
|
27
|
-
notice: 'Les changements de cette page ont été sauvegardés'
|
28
|
-
warning: "Il y'a eu un probleme et les changements de cette page n'ont pas été sauvegardés"
|
32
|
+
notice: 'Les changements de cette page ont été sauvegardés.'
|
33
|
+
warning: "Il y'a eu un probleme et les changements de cette page n'ont pas été sauvegardés."
|
29
34
|
destroy:
|
30
|
-
notice: 'La page a été supprimée'
|
31
|
-
root_warning: "Vous ne pouvez pas supprimer cette page parce que c'est la page principale de bienvenue. Veuillez la modifier."
|
35
|
+
notice: 'La page a été supprimée.'
|
36
|
+
root_warning: "Vous ne pouvez pas supprimer cette page parce que c'est la page principale de bienvenue. Veuillez la modifier."
|
37
|
+
|
38
|
+
contacts:
|
39
|
+
sent: 'Envoyé le'
|
40
|
+
|
41
|
+
create:
|
42
|
+
notice: 'Votre message a bien été envoyé.'
|
43
|
+
warning: "Il y'a eu un probleme en envoyant votre message."
|
data/lib/generators/tkh_content/create_or_update_migrations/create_or_update_migrations_generator.rb
CHANGED
@@ -22,6 +22,7 @@ module TkhContent
|
|
22
22
|
migration_template "add_parent_id_to_pages.rb", "db/migrate/add_parent_id_to_pages.rb"
|
23
23
|
migration_template "create_tags.rb", "db/migrate/create_tags.rb"
|
24
24
|
migration_template "create_taggings.rb", "db/migrate/create_taggings.rb"
|
25
|
+
migration_template "create_contacts.rb", "db/migrate/create_contacts.rb"
|
25
26
|
end
|
26
27
|
|
27
28
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateContacts < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def self.up
|
4
|
+
create_table :contacts do |t|
|
5
|
+
t.string :sender_name
|
6
|
+
t.string :sender_email
|
7
|
+
t.text :body
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
add_index :contacts, :updated_at
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.down
|
15
|
+
drop_table :contacts
|
16
|
+
remove_index :pages, :updated_at
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/lib/tkh_content/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tkh_content
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -123,22 +123,6 @@ dependencies:
|
|
123
123
|
- - ! '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: tkh_inline_editor
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
|
-
requirements:
|
131
|
-
- - ! '>='
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '0'
|
134
|
-
type: :runtime
|
135
|
-
prerelease: false
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ! '>='
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '0'
|
142
126
|
- !ruby/object:Gem::Dependency
|
143
127
|
name: sqlite3
|
144
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -163,13 +147,19 @@ extensions: []
|
|
163
147
|
extra_rdoc_files: []
|
164
148
|
files:
|
165
149
|
- app/controllers/blog_controller.rb
|
150
|
+
- app/controllers/contacts_controller.rb
|
166
151
|
- app/controllers/pages_controller.rb
|
167
152
|
- app/helpers/blog_helper.rb
|
153
|
+
- app/mailers/contact_mailer.rb
|
154
|
+
- app/models/contact.rb
|
168
155
|
- app/models/page.rb
|
169
156
|
- app/models/tag.rb
|
170
157
|
- app/models/tagging.rb
|
171
158
|
- app/views/blog/index.html.erb
|
172
159
|
- app/views/blog/index.rss.builder
|
160
|
+
- app/views/contact_mailer/message_from_contact_form.text.erb
|
161
|
+
- app/views/contacts/_form.html.erb
|
162
|
+
- app/views/contacts/index.html.erb
|
173
163
|
- app/views/pages/_form.html.erb
|
174
164
|
- app/views/pages/edit.html.erb
|
175
165
|
- app/views/pages/index.html.erb
|
@@ -187,6 +177,7 @@ files:
|
|
187
177
|
- lib/generators/tkh_content/create_or_update_migrations/create_or_update_migrations_generator.rb
|
188
178
|
- lib/generators/tkh_content/create_or_update_migrations/templates/add_author_to_pages.rb
|
189
179
|
- lib/generators/tkh_content/create_or_update_migrations/templates/add_parent_id_to_pages.rb
|
180
|
+
- lib/generators/tkh_content/create_or_update_migrations/templates/create_contacts.rb
|
190
181
|
- lib/generators/tkh_content/create_or_update_migrations/templates/create_pages.rb
|
191
182
|
- lib/generators/tkh_content/create_or_update_migrations/templates/create_taggings.rb
|
192
183
|
- lib/generators/tkh_content/create_or_update_migrations/templates/create_tags.rb
|
@@ -241,7 +232,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
241
232
|
version: '0'
|
242
233
|
segments:
|
243
234
|
- 0
|
244
|
-
hash: -
|
235
|
+
hash: -3307999387978065360
|
245
236
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
246
237
|
none: false
|
247
238
|
requirements:
|
@@ -250,7 +241,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
250
241
|
version: '0'
|
251
242
|
segments:
|
252
243
|
- 0
|
253
|
-
hash: -
|
244
|
+
hash: -3307999387978065360
|
254
245
|
requirements: []
|
255
246
|
rubyforge_project:
|
256
247
|
rubygems_version: 1.8.23
|