zen 0.2.6 → 0.2.6.1
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/{CHANGELOG → CHANGELOG.md} +13 -5
- data/MANIFEST +1 -1
- data/lib/zen.rb +6 -22
- data/lib/zen/controller/main_controller.rb +5 -4
- data/lib/zen/helper/theme.rb +6 -7
- data/lib/zen/layout/admin.xhtml +1 -1
- data/lib/zen/layout/login.xhtml +1 -1
- data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +2 -2
- data/lib/zen/package/comments/lib/comments/plugin/anti_spam.rb +2 -7
- data/lib/zen/package/settings/lib/settings/controller/settings.rb +1 -8
- data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +42 -0
- data/lib/zen/package/settings/lib/settings/plugin/settings.rb +3 -1
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +1 -6
- data/lib/zen/package/users/lib/users/model/user.rb +10 -8
- data/lib/zen/version.rb +1 -1
- metadata +2 -2
data/{CHANGELOG → CHANGELOG.md}
RENAMED
@@ -1,14 +1,22 @@
|
|
1
|
-
0.2.6
|
1
|
+
## 0.2.6.1 - June 1st, 2011
|
2
|
+
|
3
|
+
* Dropped Zen.settings and modified the settings plugin so that it works properly when
|
4
|
+
using a multi-process based environment such as Unicorn.
|
5
|
+
|
6
|
+
## 0.2.6 - May 29th, 2011
|
2
7
|
|
3
8
|
* Zen is now using RVM for gem management and such.
|
4
9
|
* Began working on making Zen compatible with at least JRuby. Rubinius isn't worth the
|
5
|
-
effort at this time.
|
10
|
+
effort at this time.
|
6
11
|
* Removed Ramaze::Helper::Common.notification in favor of Ramaze::Helper::Message.
|
7
12
|
* Dropped Zen::Database, Zen::Settings and most of the options in favor of instance
|
8
|
-
variables set in the main Zen module. See commit
|
9
|
-
|
13
|
+
variables set in the main Zen module. See commit
|
14
|
+
[d40ee1c2e518a323b2983e1bcfb7a0d863bf3b2f][d40ee1c2e518a323b2983e1bcfb7a0d863bf3b2f]
|
15
|
+
for more information.
|
10
16
|
* Translated Zen to Dutch.
|
11
17
|
* Re-organized the application prototypes to make them easier to use/understand.
|
12
18
|
* Implemented the anti-spam system as a plugin and added a decent XSS protection system
|
13
|
-
using Loofah.
|
19
|
+
using Loofah.
|
14
20
|
* Various changes to the Javascript classes.
|
21
|
+
|
22
|
+
[d40ee1c2e518a323b2983e1bcfb7a0d863bf3b2f]: https://github.com/zen-cms/Zen-Core/commit/d40ee1c2e518a323b2983e1bcfb7a0d863bf3b2f
|
data/MANIFEST
CHANGED
data/lib/zen.rb
CHANGED
@@ -28,14 +28,6 @@ module Zen
|
|
28
28
|
#
|
29
29
|
attr_accessor :database
|
30
30
|
|
31
|
-
##
|
32
|
-
# Hash containing all system settings.
|
33
|
-
#
|
34
|
-
# @author Yorick Peterse
|
35
|
-
# @since 0.2.6
|
36
|
-
#
|
37
|
-
attr_accessor :settings
|
38
|
-
|
39
31
|
##
|
40
32
|
# String containing the path to the root directory of the Zen application.
|
41
33
|
#
|
@@ -47,12 +39,10 @@ module Zen
|
|
47
39
|
##
|
48
40
|
# Loads the database and the required models.
|
49
41
|
#
|
50
|
-
# @author Yorick
|
42
|
+
# @author Yorick Peterse
|
51
43
|
# @since 0.1
|
52
44
|
#
|
53
45
|
def init
|
54
|
-
@settings ||= {}
|
55
|
-
|
56
46
|
# Initialize the database
|
57
47
|
Zen::Language.load('zen_general')
|
58
48
|
|
@@ -95,17 +85,6 @@ module Zen
|
|
95
85
|
"Failed to migrate the settings, make sure the database table is up to date"
|
96
86
|
)
|
97
87
|
end
|
98
|
-
|
99
|
-
begin
|
100
|
-
::Settings::Model::Setting.get_settings.each do |k, v|
|
101
|
-
Zen.settings[k] = v
|
102
|
-
end
|
103
|
-
rescue => e
|
104
|
-
Ramaze::Log.warn(
|
105
|
-
"Failed to retrieve the settings, are you sure the database is migrated?\n" +
|
106
|
-
"Error: #{e.message}"
|
107
|
-
)
|
108
|
-
end
|
109
88
|
end
|
110
89
|
end # class << self
|
111
90
|
end # Zen
|
@@ -138,3 +117,8 @@ require __DIR__('zen/controller/frontend_controller')
|
|
138
117
|
require __DIR__('zen/controller/admin_controller')
|
139
118
|
require __DIR__('zen/controller/main_controller')
|
140
119
|
require __DIR__('zen/controller/preview')
|
120
|
+
|
121
|
+
# Load the cache for the settings. This has to be done outside any of the init methods as
|
122
|
+
# that would make it impossible to set a custom cache.
|
123
|
+
Ramaze::Cache.options.names.push(:settings)
|
124
|
+
Ramaze::Cache.options.settings = Ramaze::Cache::LRU
|
@@ -26,12 +26,13 @@ module Zen
|
|
26
26
|
#
|
27
27
|
def index(*uri)
|
28
28
|
@request_uri = []
|
29
|
+
theme = plugin(:settings, :get, :theme).value
|
29
30
|
|
30
31
|
# Clean the URI of nasty input
|
31
32
|
uri.each { |v| @request_uri.push(h(v)) }
|
32
33
|
|
33
34
|
if !@request_uri[0] or @request_uri[0].empty?
|
34
|
-
@request_uri[0] =
|
35
|
+
@request_uri[0] = plugin(:settings, :get, :default_section).value
|
35
36
|
end
|
36
37
|
|
37
38
|
if !@request_uri[1] or @request_uri[1].empty?
|
@@ -39,11 +40,11 @@ module Zen
|
|
39
40
|
end
|
40
41
|
|
41
42
|
# A theme is always required
|
42
|
-
if
|
43
|
+
if theme.nil? or theme.empty?
|
43
44
|
respond(lang('zen_general.errors.no_theme'))
|
44
45
|
end
|
45
46
|
|
46
|
-
theme = ::Zen::Theme[
|
47
|
+
theme = ::Zen::Theme[theme]
|
47
48
|
group = @request_uri[0]
|
48
49
|
template = @request_uri[1]
|
49
50
|
|
@@ -53,7 +54,7 @@ module Zen
|
|
53
54
|
template_path = File.join(theme_path, group, "#{template}.xhtml")
|
54
55
|
|
55
56
|
# Is the website down?
|
56
|
-
if
|
57
|
+
if plugin(:settings, :get, :website_enabled).value === '0'
|
57
58
|
offline_path = File.join(theme_path, 'offline.xhtml')
|
58
59
|
|
59
60
|
if File.exist?(offline_path)
|
data/lib/zen/helper/theme.rb
CHANGED
@@ -12,7 +12,6 @@ module Ramaze
|
|
12
12
|
# @since 0.2.5
|
13
13
|
#
|
14
14
|
module Theme
|
15
|
-
|
16
15
|
##
|
17
16
|
# Renders a partial from the current theme's partial directory. The first argument
|
18
17
|
# is the name of the partial (without an extension) to render. The second argument
|
@@ -29,7 +28,8 @@ module Ramaze
|
|
29
28
|
# the partial.
|
30
29
|
#
|
31
30
|
def partial(file, variables = {})
|
32
|
-
theme =
|
31
|
+
theme = plugin(:settings, :get, :theme).value
|
32
|
+
theme = Zen::Theme[theme]
|
33
33
|
|
34
34
|
if !theme.respond_to?(:partial_dir) or theme.partial_dir.nil?
|
35
35
|
raise(::Zen::ThemeError, "The theme #{theme.name} has no partial directory set.")
|
@@ -59,7 +59,7 @@ module Ramaze
|
|
59
59
|
# @param [Hash] variables Hash with variables to pass to the 404 template.
|
60
60
|
#
|
61
61
|
def show_404(variables = {})
|
62
|
-
theme = ::Zen::Theme[
|
62
|
+
theme = ::Zen::Theme[plugin(:settings, :get, :theme).value]
|
63
63
|
template = "#{theme.template_dir}/404.xhtml"
|
64
64
|
|
65
65
|
# Render the template and replace the current buffer with it's output
|
@@ -67,7 +67,6 @@ module Ramaze
|
|
67
67
|
|
68
68
|
respond(template, 404)
|
69
69
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
end
|
70
|
+
end # Theme
|
71
|
+
end # Helper
|
72
|
+
end # Ramaze
|
data/lib/zen/layout/admin.xhtml
CHANGED
data/lib/zen/layout/login.xhtml
CHANGED
@@ -84,8 +84,8 @@ module Comments
|
|
84
84
|
end
|
85
85
|
|
86
86
|
# Require anti-spam validation?
|
87
|
-
if
|
88
|
-
engine =
|
87
|
+
if plugin(:settings, :get, :enable_antispam).value === '1'
|
88
|
+
engine = plugin(:settings, :get, :anti_spam_system).value.to_sym
|
89
89
|
spam = plugin(:anti_spam, engine, nil, nil, nil, post['comment'])
|
90
90
|
|
91
91
|
# Time to validate the Defensio response
|
@@ -114,13 +114,8 @@ module Comments
|
|
114
114
|
# @return [TrueClass/FalseClass]
|
115
115
|
#
|
116
116
|
def defensio
|
117
|
-
spam
|
118
|
-
|
119
|
-
if !::Zen.settings.key?(:defensio_key)
|
120
|
-
raise(::Zen::PluginError, "The setting \"defensio_key\" is missing")
|
121
|
-
end
|
122
|
-
|
123
|
-
api_key = ::Zen.settings[:defensio_key]
|
117
|
+
spam = true
|
118
|
+
api_key = plugin(:settings, :get, :defensio_key).value
|
124
119
|
|
125
120
|
if api_key.nil? or api_key.empty?
|
126
121
|
raise(
|
@@ -107,15 +107,8 @@ module Settings
|
|
107
107
|
|
108
108
|
# Update all settings
|
109
109
|
post.each do |key, value|
|
110
|
-
setting = Setting[:name => key]
|
111
|
-
|
112
110
|
begin
|
113
|
-
|
114
|
-
|
115
|
-
# Update the internal settings
|
116
|
-
if ::Zen.settings[key.to_sym] != value
|
117
|
-
::Zen.settings[key.to_sym] = value
|
118
|
-
end
|
111
|
+
plugin(:settings, :get, key).value = value
|
119
112
|
rescue => e
|
120
113
|
Ramaze::Log.error(e.inspect)
|
121
114
|
message(:error, flash_error)
|
@@ -69,6 +69,48 @@ module Settings
|
|
69
69
|
raise(::Zen::ValidationError, "The settings group #{group} doesn't exist.")
|
70
70
|
end
|
71
71
|
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# Updates the value of a setting both in the cache and the SQL database.
|
75
|
+
#
|
76
|
+
# @author Yorick Peterse
|
77
|
+
# @since 0.2.6.1
|
78
|
+
# @param [String] value The value to set the setting to.
|
79
|
+
#
|
80
|
+
def value=(value)
|
81
|
+
# First we'll update the SQL database
|
82
|
+
::Settings::Model::Setting[:name => name].update(:value => value)
|
83
|
+
|
84
|
+
# Sync the cache
|
85
|
+
::Ramaze::Cache.settings.store(name, value)
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# Retrieves the setting. If it exists in the cache the cache's value is used,
|
90
|
+
# otherwise it will be retrieved from the SQL database and cached.
|
91
|
+
#
|
92
|
+
# @author Yorick Peterse
|
93
|
+
# @since 0.2.6.1
|
94
|
+
#
|
95
|
+
def value
|
96
|
+
val = ::Ramaze::Cache.settings.fetch(name)
|
97
|
+
|
98
|
+
# Get the setting from the database
|
99
|
+
if val.nil?
|
100
|
+
setting = ::Settings::Model::Setting[:name => name]
|
101
|
+
|
102
|
+
# If the value is also nil we'll use the default value
|
103
|
+
if setting.value.nil? or setting.value.empty?
|
104
|
+
val = setting.default
|
105
|
+
else
|
106
|
+
val = setting.value
|
107
|
+
end
|
108
|
+
|
109
|
+
::Ramaze::Cache.settings.store(name, val)
|
110
|
+
end
|
111
|
+
|
112
|
+
return val
|
113
|
+
end
|
72
114
|
end # SettingBase
|
73
115
|
end # Plugin
|
74
116
|
end # Settings
|
@@ -181,7 +181,9 @@ module Settings
|
|
181
181
|
# @return [Zen::StrictStruct]
|
182
182
|
#
|
183
183
|
def get(name)
|
184
|
-
validate_type(name, :name, [String])
|
184
|
+
validate_type(name, :name, [String, Symbol])
|
185
|
+
|
186
|
+
name = name.to_s
|
185
187
|
|
186
188
|
if !Registered[:settings].key?(name)
|
187
189
|
raise(ArgumentError, "The setting #{name} doesn't exist.")
|
@@ -20,12 +20,7 @@
|
|
20
20
|
@settings_ordered.each do |group, items|
|
21
21
|
f.g.div(:id => "group_#{group}") do
|
22
22
|
items.each do |s|
|
23
|
-
|
24
|
-
if ::Zen.settings[s.name.to_sym].nil?
|
25
|
-
value = s.default
|
26
|
-
else
|
27
|
-
value = ::Zen.settings[s.name.to_sym]
|
28
|
-
end
|
23
|
+
value = plugin(:settings, :get, s.name).value
|
29
24
|
|
30
25
|
case s.type
|
31
26
|
when 'textbox'
|
@@ -42,24 +42,26 @@ module Users
|
|
42
42
|
# @param [Hash] creds The specified credentials
|
43
43
|
# @return [Object/Boolean] new instance of the given user.
|
44
44
|
#
|
45
|
-
def self.authenticate
|
45
|
+
def self.authenticate(creds)
|
46
46
|
email = creds['email']
|
47
47
|
password = creds['password']
|
48
48
|
|
49
|
-
if email.nil? or password.nil?
|
50
|
-
return false
|
51
|
-
end
|
49
|
+
return false if email.nil? or password.nil?
|
52
50
|
|
53
51
|
user = self[:email => email]
|
54
52
|
|
55
53
|
if !user.nil? and user.password == password and user.status == 'open'
|
56
54
|
# Overwrite all the global settings with the user specific ones
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
[:language, :frontend_language, :date_format].each do |setting|
|
56
|
+
# "plugin" is already defined by Sequel so we'll have to call the plugin
|
57
|
+
# manually.
|
58
|
+
value = ::Zen::Plugin[:settings].plugin.new(:get, setting).call.value
|
59
|
+
|
60
|
+
if user.respond_to?(setting)
|
61
|
+
got = user.send(setting)
|
60
62
|
|
61
63
|
if got.nil? or got.empty?
|
62
|
-
user.send("#{
|
64
|
+
user.send("#{setting}=", value)
|
63
65
|
end
|
64
66
|
end
|
65
67
|
end
|
data/lib/zen/version.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: zen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.6
|
5
|
+
version: 0.2.6.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Yorick Peterse
|
@@ -203,7 +203,7 @@ files:
|
|
203
203
|
- .gems
|
204
204
|
- .travis.yml
|
205
205
|
- AUTHORS
|
206
|
-
- CHANGELOG
|
206
|
+
- CHANGELOG.md
|
207
207
|
- LICENSE
|
208
208
|
- MANIFEST
|
209
209
|
- README.md
|