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 CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
 
4
4
 
5
+ ## 0.1.9
6
+
7
+ * Removed inline editor. Will add another one soon
8
+ * Created a contact form
9
+
10
+
11
+ ## 0.1.8
12
+
13
+ * Some debugging
14
+
15
+
5
16
  ## 0.1.7
6
17
 
7
18
  * Added tags to blog
data/README.md CHANGED
@@ -62,7 +62,7 @@ Start your server!
62
62
  ## Usage
63
63
 
64
64
 
65
- The section is located at:
65
+ The main section is located at:
66
66
 
67
67
  /pages
68
68
 
@@ -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,9 @@
1
+ Here is the message <%= @contact.sender_name %> sent via the contact form on the web site:
2
+
3
+ -----------------------------------
4
+
5
+ <%= @contact.body %>
6
+
7
+ -----------------------------------
8
+
9
+ Their email address is: <%= @contact.sender_email %>
@@ -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 => 25, :id => 'editable' } %>
17
+ <%= f.input :body, :input_html => { :rows => 35 } %>
18
18
  </div>
19
19
 
20
20
  <div class="form-actions">
@@ -2,7 +2,7 @@
2
2
 
3
3
  <table class='table table-striped'>
4
4
  <thead>
5
- <tr>
5
+ <tr>
6
6
  <th><%= t 'activerecord.attributes.pages.title' %></th>
7
7
  <th><%= t 'activerecord.attributes.pages.description' %></th>
8
8
  <th><%= t 'pages.author'.capitalize %></th>
@@ -5,5 +5,8 @@
5
5
 
6
6
  <%= raw @page.body %>
7
7
 
8
+ <!-- remove this once DSL has been created -->
9
+ <%= render 'contacts/form' if params[:id].to_i == 5 %>
10
+
8
11
  <%# partial in tkh_menus gem or has to be added in host app %>
9
12
  <%= render './shared/menus' %>
data/config/routes.rb CHANGED
@@ -9,5 +9,6 @@ Rails.application.routes.draw do
9
9
  end
10
10
  get 'blog' => 'blog#index', as: :blog
11
11
  get 'tags/:tag', to: 'blog#index', as: :tag
12
+ resources :contacts
12
13
  end
13
14
  end
@@ -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."
@@ -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
@@ -1,3 +1,3 @@
1
1
  module TkhContent
2
- VERSION = "0.1.8"
2
+ VERSION = "0.1.9"
3
3
  end
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.8
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: 2012-09-25 00:00:00.000000000 Z
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: -3856383533934555499
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: -3856383533934555499
244
+ hash: -3307999387978065360
254
245
  requirements: []
255
246
  rubyforge_project:
256
247
  rubygems_version: 1.8.23