zen 0.2.6 → 0.2.6.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|