alchemy_cms 2.6.1 → 2.6.2
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.
- checksums.yaml +7 -0
- data/app/controllers/alchemy/admin/pictures_controller.rb +1 -1
- data/app/helpers/alchemy/pages_helper.rb +1 -1
- data/app/mailers/alchemy/notifications.rb +9 -6
- data/app/sweepers/alchemy/pictures_sweeper.rb +1 -1
- data/app/views/alchemy/essences/_essence_text_view.html.erb +5 -3
- data/app/views/alchemy/notifications/registered_user_created.de.text.erb +1 -1
- data/app/views/alchemy/notifications/registered_user_created.en.text.erb +1 -1
- data/config/locales/alchemy.de.yml +2 -6
- data/config/locales/alchemy.en.yml +0 -6
- data/config/routes.rb +1 -1
- data/lib/alchemy/mount_point.rb +36 -11
- data/lib/alchemy/seeder.rb +8 -36
- data/lib/alchemy/shell.rb +80 -0
- data/lib/alchemy/upgrader.rb +36 -36
- data/lib/alchemy/upgrader/two_point_five.rb +79 -0
- data/lib/alchemy/upgrader/two_point_four.rb +25 -0
- data/lib/alchemy/upgrader/two_point_one.rb +95 -0
- data/lib/alchemy/upgrader/two_point_six.rb +32 -0
- data/lib/alchemy/upgrader/two_point_three.rb +25 -0
- data/lib/alchemy/upgrader/two_point_two.rb +69 -0
- data/lib/alchemy/upgrader/two_point_zero.rb +13 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/tasks/alchemy/upgrade.rake +1 -1
- data/spec/libraries/mount_point_spec.rb +62 -0
- data/spec/libraries/shell_spec.rb +123 -0
- data/spec/mailers/notifications_spec.rb +67 -0
- metadata +41 -79
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5cd8a76bd94ec8a9ce8224cc3c4717e2586f19bb
|
4
|
+
data.tar.gz: 061556fac26ed8fded1fee1744928741d11e2daa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ede2710502558c4be7ec68064ab6b35cce31e9158c49ecd73440c797ff8d6f76ce3bf6d43d6564c661ff014568d02cdb5b9e16fec451eddf697305e3537bde2a
|
7
|
+
data.tar.gz: 6fd48a42acc533c9bb05238cd6dbf8206c95b765602f84ca2dd679ad08c34065269d8113c74a5cef31bb1b80967494a00f38f2ec6a146a263d882848c25e5e55
|
@@ -150,7 +150,7 @@ module Alchemy
|
|
150
150
|
|
151
151
|
def flush
|
152
152
|
# FileUtils.rm_rf only takes arrays of folders...
|
153
|
-
FileUtils.rm_rf Dir.glob(Rails.root.join('public', Alchemy.
|
153
|
+
FileUtils.rm_rf Dir.glob(Rails.root.join('public', Alchemy::MountPoint.get, 'pictures', '*'))
|
154
154
|
@notice = _t('Picture cache flushed')
|
155
155
|
end
|
156
156
|
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Alchemy
|
2
2
|
class Notifications < ActionMailer::Base
|
3
3
|
|
4
|
-
default
|
4
|
+
default(from: Config.get(:mailer)['mail_from'])
|
5
5
|
|
6
6
|
def registered_user_created(user)
|
7
7
|
@user = user
|
8
8
|
@url = login_url
|
9
9
|
mail(
|
10
|
-
:
|
11
|
-
:
|
10
|
+
to: user.email,
|
11
|
+
subject: I18n.t("Your user credentials")
|
12
12
|
)
|
13
13
|
end
|
14
14
|
|
@@ -16,14 +16,17 @@ module Alchemy
|
|
16
16
|
@user = user
|
17
17
|
@url = admin_url
|
18
18
|
mail(
|
19
|
-
:
|
20
|
-
:
|
19
|
+
to: user.email,
|
20
|
+
subject: I18n.t("Your Alchemy Login")
|
21
21
|
)
|
22
22
|
end
|
23
23
|
|
24
24
|
def reset_password_instructions(user, opts={})
|
25
25
|
@user = user
|
26
|
-
mail
|
26
|
+
mail(
|
27
|
+
to: user.email,
|
28
|
+
subject: I18n.t("Reset password instructions")
|
29
|
+
)
|
27
30
|
end
|
28
31
|
|
29
32
|
end
|
@@ -14,7 +14,7 @@ module Alchemy
|
|
14
14
|
|
15
15
|
def expire_cache_for(picture)
|
16
16
|
# Removing all variants of the picture with FileUtils.
|
17
|
-
FileUtils.rm_rf(Rails.root.join('public', Alchemy.
|
17
|
+
FileUtils.rm_rf(Rails.root.join('public', Alchemy::MountPoint.get, 'pictures', picture.id.to_s))
|
18
18
|
end
|
19
19
|
|
20
20
|
end
|
@@ -4,8 +4,10 @@
|
|
4
4
|
<%= link_to(
|
5
5
|
content.ingredient,
|
6
6
|
url_for(content.essence.link),
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
{
|
8
|
+
title: content.essence.link_title,
|
9
|
+
target: (content.essence.link_target == "blank" ? "_blank" : nil),
|
10
|
+
'data-link-target' => content.essence.link_target
|
11
|
+
}.merge(html_options)
|
10
12
|
) %>
|
11
13
|
<%- end -%>
|
@@ -8,6 +8,6 @@ Es wurde ein Zufallspasswort generiert. Aus Sicherheitsgründen wird dieses hier
|
|
8
8
|
|
9
9
|
Klicken Sie bitte daher auf den folgenden Link (*), um sich ein neues Passwort zu vergeben:
|
10
10
|
|
11
|
-
<%= alchemy.new_password_url(
|
11
|
+
<%= alchemy.new_password_url(email: @user.email) %>
|
12
12
|
|
13
13
|
*) Sollte dies nicht funktionieren, so kopieren Sie Sich bitte diesen Link und tragen Sie ihn in die Adresszeile Ihres Webbrowsers ein.
|
@@ -8,6 +8,6 @@ The password was randomly created. For security reasons it is not displayed here
|
|
8
8
|
|
9
9
|
Please follow this link (*) to reset your password:
|
10
10
|
|
11
|
-
<%= alchemy.new_password_url(
|
11
|
+
<%= alchemy.new_password_url(email: @user.email) %>
|
12
12
|
|
13
13
|
*) If this does not work, please copy the url and paste it into the address bar of your web browser.
|
@@ -130,12 +130,6 @@ de:
|
|
130
130
|
messages:
|
131
131
|
success: 'Ihre Nachricht wurde erfolgreich übermittelt.'
|
132
132
|
|
133
|
-
# == Translations for the mailer templates
|
134
|
-
mailer:
|
135
|
-
# The mail the user gets after registering for alchemy
|
136
|
-
new_user_mail:
|
137
|
-
subject: 'Ihre Zugangsdaten'
|
138
|
-
|
139
133
|
# == Translated language names for translation select
|
140
134
|
translations:
|
141
135
|
de: 'Deutsch'
|
@@ -282,6 +276,7 @@ de:
|
|
282
276
|
"Remove tag filter": "Filter entfernen"
|
283
277
|
"Remove this content": "Diesen Inhalt entfernen"
|
284
278
|
"Reset Imagemask": "Bildmaske zurücksetzen"
|
279
|
+
"Reset password instructions": "Anweisungen um Ihr Passwort zurückzusetzen"
|
285
280
|
"Select all": "Alle auswählen"
|
286
281
|
"Select an content": "Wählen Sie einen Inhalt aus"
|
287
282
|
"Select style": "Stilvorlage"
|
@@ -329,6 +324,7 @@ de:
|
|
329
324
|
"You may upload files with following extensions": "Sie können %{file_types_description} mit folgenden Endungen hochladen: %{file_types}"
|
330
325
|
"You may upload any file": "Sie können jede Art von Datei hochladen."
|
331
326
|
"Your last login was on %{time}": "Sie waren zuletzt angemeldet am %{time}."
|
327
|
+
"Your user credentials": "Ihre Zugangsdaten"
|
332
328
|
"Your Alchemy Login": "Ihre Alchemy Zugangsdaten"
|
333
329
|
"Your last updated pages": "Ihre zuletzt bearbeiteten Seiten"
|
334
330
|
"Your trash is empty": "Der Papierkorb ist leer"
|
@@ -116,12 +116,6 @@ en:
|
|
116
116
|
messages:
|
117
117
|
success: 'Your message was delivered succesfully.'
|
118
118
|
|
119
|
-
# == Translations for the mailer templates
|
120
|
-
mailer:
|
121
|
-
# The mail the user gets after registering for alchemy
|
122
|
-
new_user_mail:
|
123
|
-
subject: 'Your user credentials'
|
124
|
-
|
125
119
|
# == Translated language names for translation select
|
126
120
|
translations:
|
127
121
|
de: 'German'
|
data/config/routes.rb
CHANGED
data/lib/alchemy/mount_point.rb
CHANGED
@@ -1,16 +1,41 @@
|
|
1
1
|
module Alchemy
|
2
|
+
# Utitlities for Alchemy's mount point in the host rails app.
|
3
|
+
#
|
4
|
+
class MountPoint
|
2
5
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
# Returns the path of Alchemy's mount point in current rails app.
|
7
|
+
#
|
8
|
+
# @param [Boolean] remove_leading_slash_if_blank
|
9
|
+
# Pass false to not return a leading slash on empty mount point.
|
10
|
+
#
|
11
|
+
def self.get(remove_leading_slash_if_blank = true)
|
12
|
+
if self.mount_point == "/" && remove_leading_slash_if_blank
|
13
|
+
self.mount_point.gsub(/^\/$/, '')
|
14
|
+
else
|
15
|
+
self.mount_point
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns the routes object from Alchemy in the host app.
|
20
|
+
#
|
21
|
+
def self.routes
|
22
|
+
::Rails.application.routes.named_routes[:alchemy]
|
13
23
|
end
|
14
|
-
end
|
15
24
|
|
25
|
+
# Returns the raw mount point path from the Rails app routes.
|
26
|
+
#
|
27
|
+
# If Alchemy is not mounted in the main app, it falls back to root path.
|
28
|
+
#
|
29
|
+
def self.mount_point
|
30
|
+
if self.routes.nil?
|
31
|
+
::Rails.logger.warn <<-WARN
|
32
|
+
Alchemy is not mounted! Falling back to root path (/).
|
33
|
+
If you want to change Alchemy's mount point, please mount Alchemy::Engine in your config/routes.rb file.
|
34
|
+
WARN
|
35
|
+
return '/'
|
36
|
+
end
|
37
|
+
routes.path.spec.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
16
41
|
end
|
data/lib/alchemy/seeder.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require "#{File.dirname(__FILE__)}/shell"
|
2
2
|
|
3
3
|
module Alchemy
|
4
4
|
class Seeder
|
5
5
|
|
6
|
+
extend Shell
|
7
|
+
|
6
8
|
class << self
|
7
9
|
|
8
10
|
# This seed builds the necessary page structure for alchemy in your database.
|
@@ -14,36 +16,6 @@ module Alchemy
|
|
14
16
|
|
15
17
|
private
|
16
18
|
|
17
|
-
def color(name)
|
18
|
-
case name
|
19
|
-
when :green
|
20
|
-
Thor::Shell::Color::GREEN
|
21
|
-
when :red
|
22
|
-
Thor::Shell::Color::RED
|
23
|
-
when :yellow
|
24
|
-
Thor::Shell::Color::YELLOW
|
25
|
-
when :black
|
26
|
-
Thor::Shell::Color::BLACK
|
27
|
-
when :clear
|
28
|
-
Thor::Shell::Color::CLEAR
|
29
|
-
else
|
30
|
-
""
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def log(message, type=nil)
|
35
|
-
case type
|
36
|
-
when :skip
|
37
|
-
puts "#{color(:yellow)}== Skipping! #{message}#{color(:clear)}"
|
38
|
-
when :error
|
39
|
-
puts "#{color(:red)}!! ERROR: #{message}#{color(:clear)}"
|
40
|
-
when :message
|
41
|
-
puts "#{color(:clear)}#{message}"
|
42
|
-
else
|
43
|
-
puts "#{color(:green)}== #{message}#{color(:clear)}"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
19
|
def desc(message)
|
48
20
|
puts "\n#{message}"
|
49
21
|
puts "#{'-' * message.length}\n"
|
@@ -76,11 +48,11 @@ module Alchemy
|
|
76
48
|
|
77
49
|
def create_default_site
|
78
50
|
desc "Creating default site"
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
51
|
+
if Alchemy::Site.count == 0
|
52
|
+
site = Alchemy::Site.new(
|
53
|
+
name: 'Default Site',
|
54
|
+
host: '*'
|
55
|
+
)
|
84
56
|
if Alchemy::Language.any?
|
85
57
|
site.languages = Alchemy::Language.all
|
86
58
|
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'thor/shell/color'
|
3
|
+
|
4
|
+
module Alchemy
|
5
|
+
|
6
|
+
# Provides methods for collecting sentences and displaying them
|
7
|
+
# in a list on the shell / log
|
8
|
+
#
|
9
|
+
module Shell
|
10
|
+
|
11
|
+
def todo(todo)
|
12
|
+
add_todo todo
|
13
|
+
end
|
14
|
+
|
15
|
+
# Adds a sentence to the todos Array
|
16
|
+
#
|
17
|
+
# @param [String] todo
|
18
|
+
#
|
19
|
+
def add_todo(todo)
|
20
|
+
todos << todo
|
21
|
+
end
|
22
|
+
|
23
|
+
# All todos
|
24
|
+
#
|
25
|
+
# @return [Array]
|
26
|
+
#
|
27
|
+
def todos
|
28
|
+
@@todos ||= []
|
29
|
+
end
|
30
|
+
|
31
|
+
# Prints out all the todos
|
32
|
+
#
|
33
|
+
def display_todos
|
34
|
+
if todos.length > 0
|
35
|
+
log "\nTODOS:", :message
|
36
|
+
log "------\n", :message
|
37
|
+
todos.each_with_index do |todo, i|
|
38
|
+
log "\n#{i+1}. ", :message
|
39
|
+
log todo, :message
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Prints out the given todo message with the color due to its type
|
45
|
+
#
|
46
|
+
# @param [String] message
|
47
|
+
# @param [Symbol] type
|
48
|
+
#
|
49
|
+
def log(message, type=nil)
|
50
|
+
case type
|
51
|
+
when :skip
|
52
|
+
puts "#{color(:yellow)}== Skipping! #{message}#{color(:clear)}"
|
53
|
+
when :error
|
54
|
+
puts "#{color(:red)}!! ERROR: #{message}#{color(:clear)}"
|
55
|
+
when :message
|
56
|
+
puts "#{color(:clear)}#{message}"
|
57
|
+
else
|
58
|
+
puts "#{color(:green)}== #{message}#{color(:clear)}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# Gives the color string using Thor
|
65
|
+
# Used for colorizing the message on the shell
|
66
|
+
#
|
67
|
+
# @param [String] name
|
68
|
+
# @return [String]
|
69
|
+
#
|
70
|
+
def color(name)
|
71
|
+
color_const = name.to_s.upcase
|
72
|
+
if Thor::Shell::Color.const_defined?(color_const)
|
73
|
+
"Thor::Shell::Color::#{color_const}".constantize
|
74
|
+
else
|
75
|
+
""
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
data/lib/alchemy/upgrader.rb
CHANGED
@@ -1,54 +1,54 @@
|
|
1
1
|
module Alchemy
|
2
2
|
class Upgrader < Alchemy::Seeder
|
3
|
+
|
4
|
+
Dir["#{File.dirname(__FILE__)}/upgrader/*.rb"].each { |f| require f }
|
5
|
+
|
6
|
+
extend TwoPointSix
|
7
|
+
extend TwoPointFive
|
8
|
+
extend TwoPointFour
|
9
|
+
extend TwoPointThree
|
10
|
+
extend TwoPointTwo
|
11
|
+
extend TwoPointOne
|
12
|
+
extend TwoPointZero
|
13
|
+
|
3
14
|
class << self
|
4
15
|
|
5
16
|
# Runs ugrades
|
6
17
|
#
|
7
|
-
# Set UPGRADE env variable to only run a specific task.
|
8
18
|
def run!
|
9
|
-
|
10
|
-
|
11
|
-
self.send(task)
|
12
|
-
end
|
13
|
-
else
|
14
|
-
run_all
|
19
|
+
upgrade_tasks.each do |task|
|
20
|
+
self.send(task)
|
15
21
|
end
|
16
22
|
display_todos
|
17
23
|
end
|
18
24
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
+
# Tasks that should run.
|
26
|
+
#
|
27
|
+
# Set UPGRADE env variable to only run a specific task.
|
28
|
+
#
|
29
|
+
# Run +rake alchemy:upgrade:list+ for all available tasks
|
30
|
+
#
|
31
|
+
def upgrade_tasks
|
32
|
+
if ENV['UPGRADE'].present?
|
33
|
+
ENV['UPGRADE'].split(',')
|
34
|
+
else
|
35
|
+
all_upgrade_tasks
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# All available upgrade tasks
|
40
|
+
#
|
41
|
+
def all_upgrade_tasks
|
42
|
+
private_methods - Object.private_methods - superclass.private_methods
|
25
43
|
end
|
26
44
|
|
27
45
|
private
|
28
46
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
log "No attachments found", :skip
|
35
|
-
else
|
36
|
-
files.each do |file|
|
37
|
-
file_uid = file.gsub(/#{Rails.root.to_s}\/uploads\/attachments\//, '')
|
38
|
-
file_id = file_uid.split('/')[1].to_i
|
39
|
-
attachment = Alchemy::Attachment.find_by_id(file_id)
|
40
|
-
if attachment && attachment.file_uid.blank?
|
41
|
-
attachment.file_uid = file_uid
|
42
|
-
attachment.file_size = File.new(file).size
|
43
|
-
attachment.file_name = attachment.sanitized_filename
|
44
|
-
if attachment.save!
|
45
|
-
log "Converted #{file_uid}"
|
46
|
-
end
|
47
|
-
else
|
48
|
-
log "Attachment with id #{file_id} not found or already converted.", :skip
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
47
|
+
# Setup task
|
48
|
+
def setup
|
49
|
+
Rake::Task['alchemy:install:migrations'].invoke
|
50
|
+
Rake::Task['db:migrate'].invoke
|
51
|
+
Seeder.seed!
|
52
52
|
end
|
53
53
|
|
54
54
|
def copy_new_config_file
|