rich_cms 2.1.7 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/{CHANGELOG → CHANGELOG.rdoc} +24 -0
- data/README.textile +49 -33
- data/Rakefile +92 -10
- data/VERSION +1 -1
- data/app/controllers/rich/cms_controller.rb +10 -39
- data/app/controllers/rich/cms_sessions_controller.rb +31 -0
- data/app/views/rich/cms/dock/_menu.html.erb +10 -8
- data/app/views/rich/cms/dock/_panel.html.erb +1 -1
- data/app/views/rich/cms/dock/panel/edit/_rails2.html.erb +5 -3
- data/app/views/rich/cms/dock/panel/edit/_rails3.html.erb +4 -2
- data/app/views/rich/cms/dock/panel/login/_rails2.html.erb +18 -12
- data/app/views/rich/cms/dock/panel/login/_rails3.html.erb +18 -12
- data/app/views/rich_cms.html.erb +1 -1
- data/assets/jzip/jquery/cleditor.js +1132 -1132
- data/assets/jzip/jquery/extensions/browser_detect.js +1 -2
- data/assets/jzip/native/extensions.js +41 -0
- data/assets/jzip/rich/cms/editor.js +41 -7
- data/assets/jzip/rich_cms.jz +2 -1
- data/assets/sass/rich_cms/_panel.sass +11 -1
- data/config/routes.rb +12 -11
- data/lib/generators/rich/cms_admin/cms_admin_generator.rb +82 -0
- data/lib/generators/rich/{authlogic_user/templates → cms_admin/templates/authlogic}/migration.rb +0 -0
- data/lib/generators/rich/{authlogic_user/templates → cms_admin/templates/authlogic}/model.rb +0 -0
- data/lib/generators/rich/{authlogic_user/templates → cms_admin/templates/authlogic}/session.rb +0 -0
- data/lib/rich/cms/actionpack/action_controller/base.rb +3 -44
- data/lib/rich/cms/actionpack/action_view/base.rb +32 -10
- data/lib/rich/cms/actionpack.rb +1 -2
- data/lib/rich/cms/auth.rb +110 -0
- data/lib/rich/cms/content/group.rb +1 -2
- data/lib/rich/cms/content/item.rb +2 -3
- data/lib/rich/cms/core/string/html_safe.rb +1 -2
- data/lib/rich/cms/core/string.rb +1 -2
- data/lib/rich/cms/engine.rb +23 -51
- data/lib/rich/cms/rails/engine.rb +1 -2
- data/lib/rich/cms/version.rb +11 -0
- data/lib/rich_cms.rb +2 -2
- data/rails_generators/rich_cms_admin/lib/devise/route_devise.rb +32 -0
- data/rails_generators/rich_cms_admin/rich_cms_admin_generator.rb +113 -0
- data/rails_generators/{rich_authlogic_user/templates → rich_cms_admin/templates/authlogic}/migration.rb +0 -0
- data/rails_generators/{rich_authlogic_user/templates → rich_cms_admin/templates/authlogic}/model.rb +0 -0
- data/rails_generators/{rich_authlogic_user/templates → rich_cms_admin/templates/authlogic}/session.rb +0 -0
- data/rails_generators/{rich_authlogic_user → rich_cms_admin}/templates/config.rb +0 -0
- data/rails_generators/rich_cms_admin/templates/devise/README +23 -0
- data/rails_generators/rich_cms_admin/templates/devise/devise.rb +105 -0
- data/rails_generators/rich_cms_admin/templates/devise/en.yml +35 -0
- data/rails_generators/rich_cms_admin/templates/devise/migration.rb +23 -0
- data/rails_generators/rich_cms_admin/templates/devise/model.rb +9 -0
- data/rails_generators/rich_cms_content/rich_cms_content_generator.rb +18 -12
- data/rich_cms.gemspec +295 -105
- data/test/integrator.rb +89 -0
- data/test/rails-2/dummy/.bundle/config +2 -0
- data/test/rails-2/dummy/Gemfile +15 -0
- data/test/rails-2/dummy/Gemfile.lock +97 -0
- data/test/rails-2/dummy/Rakefile +10 -0
- data/test/rails-2/dummy/app/controllers/application_controller.rb +10 -0
- data/test/rails-2/dummy/app/helpers/application_helper.rb +3 -0
- data/test/rails-2/dummy/config/boot.rb +124 -0
- data/test/rails-2/dummy/config/database.yml +23 -0
- data/test/rails-2/dummy/config/environment.rb +41 -0
- data/test/rails-2/dummy/config/environments/development.rb +17 -0
- data/test/rails-2/dummy/config/environments/production.rb +28 -0
- data/test/rails-2/dummy/config/environments/test.rb +28 -0
- data/test/rails-2/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails-2/dummy/config/initializers/cookie_verification_secret.rb +7 -0
- data/test/rails-2/dummy/config/initializers/devise.rb +105 -0
- data/test/rails-2/dummy/config/initializers/enrichments.rb +5 -0
- data/test/rails-2/dummy/config/initializers/inflections.rb +10 -0
- data/test/rails-2/dummy/config/initializers/mime_types.rb +5 -0
- data/test/rails-2/dummy/config/initializers/new_rails_defaults.rb +21 -0
- data/test/rails-2/dummy/config/initializers/session_store.rb +15 -0
- data/test/rails-2/dummy/config/locales/en.yml +5 -0
- data/test/rails-2/dummy/config/preinitializer.rb +20 -0
- data/test/rails-2/dummy/config/routes.rb +44 -0
- data/test/rails-2/dummy/db/schema.rb +49 -0
- data/test/rails-2/dummy/db/seeds.rb +10 -0
- data/test/rails-2/dummy/public/404.html +30 -0
- data/test/rails-2/dummy/public/422.html +30 -0
- data/test/rails-2/dummy/public/500.html +30 -0
- data/test/rails-2/dummy/public/favicon.ico +0 -0
- data/test/rails-2/dummy/public/images/rails.png +0 -0
- data/test/rails-2/dummy/public/images/rich/cms/cleditor/buttons.gif +0 -0
- data/test/rails-2/dummy/public/images/rich/cms/cleditor/toolbar.gif +0 -0
- data/test/rails-2/dummy/public/javascripts/jquery/core.js +158 -0
- data/test/rails-2/dummy/public/javascripts/jquery/ui/rich_cms/core.js +1207 -0
- data/test/rails-2/dummy/public/javascripts/jquery/ui/rich_cms/draggable.js +798 -0
- data/test/rails-2/dummy/public/javascripts/jquery/ui/rich_cms/mouse.js +950 -0
- data/test/rails-2/dummy/public/javascripts/jquery/ui/rich_cms/widget.js +1188 -0
- data/test/rails-2/dummy/public/javascripts/rich_cms.js +1746 -0
- data/test/rails-2/dummy/public/robots.txt +5 -0
- data/test/rails-2/dummy/script/about +4 -0
- data/test/rails-2/dummy/script/console +3 -0
- data/test/rails-2/dummy/script/dbconsole +3 -0
- data/test/rails-2/dummy/script/destroy +3 -0
- data/test/rails-2/dummy/script/generate +3 -0
- data/test/rails-2/dummy/script/performance/benchmarker +3 -0
- data/test/rails-2/dummy/script/performance/profiler +3 -0
- data/test/rails-2/dummy/script/plugin +3 -0
- data/test/rails-2/dummy/script/runner +3 -0
- data/test/rails-2/dummy/script/server +3 -0
- data/test/rails-2/dummy/test/fixtures/authlogic_users.yml +6 -0
- data/test/rails-2/dummy/test/fixtures/devise_users.yml +5 -0
- data/test/rails-2/pending.rb +88 -0
- data/test/rails-2/test_helper.rb +13 -0
- data/test/rails-3/dummy/.bundle/config +2 -0
- data/test/rails-3/dummy/Gemfile +15 -0
- data/test/rails-3/dummy/Gemfile.lock +139 -0
- data/test/rails-3/dummy/Rakefile +7 -0
- data/test/rails-3/dummy/app/controllers/application_controller.rb +3 -0
- data/test/rails-3/dummy/app/helpers/application_helper.rb +2 -0
- data/test/rails-3/dummy/config/application.rb +42 -0
- data/test/rails-3/dummy/config/boot.rb +13 -0
- data/test/rails-3/dummy/config/database.yml +23 -0
- data/test/rails-3/dummy/config/environment.rb +5 -0
- data/test/rails-3/dummy/config/environments/development.rb +26 -0
- data/test/rails-3/dummy/config/environments/production.rb +49 -0
- data/test/rails-3/dummy/config/environments/test.rb +35 -0
- data/test/rails-3/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails-3/dummy/config/initializers/devise.rb +142 -0
- data/test/rails-3/dummy/config/initializers/enrichments.rb +5 -0
- data/test/rails-3/dummy/config/initializers/inflections.rb +10 -0
- data/test/rails-3/dummy/config/initializers/mime_types.rb +5 -0
- data/test/rails-3/dummy/config/initializers/secret_token.rb +7 -0
- data/test/rails-3/dummy/config/initializers/session_store.rb +8 -0
- data/test/rails-3/dummy/config/locales/en.yml +5 -0
- data/test/rails-3/dummy/config/routes.rb +59 -0
- data/test/rails-3/dummy/config.ru +4 -0
- data/test/rails-3/dummy/db/schema.rb +49 -0
- data/test/rails-3/dummy/db/seeds.rb +10 -0
- data/test/rails-3/dummy/public/404.html +26 -0
- data/test/rails-3/dummy/public/422.html +26 -0
- data/test/rails-3/dummy/public/500.html +26 -0
- data/test/rails-3/dummy/public/favicon.ico +0 -0
- data/test/rails-3/dummy/public/images/rich/cms/cleditor/buttons.gif +0 -0
- data/test/rails-3/dummy/public/images/rich/cms/cleditor/toolbar.gif +0 -0
- data/test/rails-3/dummy/public/javascripts/jquery/core.js +158 -0
- data/test/rails-3/dummy/public/javascripts/jquery/ui/rich_cms/core.js +1207 -0
- data/test/rails-3/dummy/public/javascripts/jquery/ui/rich_cms/draggable.js +798 -0
- data/test/rails-3/dummy/public/javascripts/jquery/ui/rich_cms/mouse.js +950 -0
- data/test/rails-3/dummy/public/javascripts/jquery/ui/rich_cms/widget.js +1188 -0
- data/test/rails-3/dummy/public/javascripts/rich_cms.js +1746 -0
- data/test/rails-3/dummy/script/rails +6 -0
- data/test/rails-3/dummy/test/fixtures/authlogic_users.yml +6 -0
- data/test/rails-3/dummy/test/fixtures/devise_users.yml +5 -0
- data/test/rails-3/test_helper.rb +17 -0
- data/test/shared/dummy/db/schema.rb +49 -0
- data/test/shared/dummy/db/seeds.rb +10 -0
- data/test/shared/dummy/fixtures/authlogic_users.yml +6 -0
- data/test/shared/dummy/models/authlogic_user.rb +8 -0
- data/test/shared/dummy/models/authlogic_user_session.rb +10 -0
- data/test/shared/dummy/models/cms_content.rb +2 -0
- data/test/shared/dummy/models/devise_user.rb +3 -0
- data/test/shared/dummy/stylesheets/app.css +100 -0
- data/test/shared/dummy/stylesheets/rich_cms.css +159 -0
- data/test/shared/dummy/views/application/index.html.erb +13 -0
- data/test/shared/dummy/views/layouts/application.html.erb +12 -0
- data/test/shared/support/action_controller/integration.rb +55 -0
- data/test/shared/support/action_controller/test_case.rb +28 -0
- data/test/shared/support/capybara/setup.rb +14 -0
- data/test/shared/support/test_helper.rb +1 -0
- data/test/shared/tests/actionpack/action_controller/base_test.rb +14 -0
- data/test/shared/tests/actionpack/action_view/base_test.rb +19 -0
- data/test/shared/tests/activesupport/active_support/dependencies_test.rb +15 -0
- data/test/shared/tests/app/integration/authenticated/authlogic.rb +88 -0
- data/test/shared/tests/app/integration/authenticated/devise_test.rb +89 -0
- data/test/shared/tests/app/integration/non_authenticated.rb +63 -0
- data/test/shared/tests/app/routing_test.rb +31 -0
- data/test/shared/tests/auth_test.rb +11 -0
- data/test/shared/tests/content/group.rb +10 -0
- data/test/shared/tests/content/item.rb +10 -0
- data/test/shared/tests/core/string/html_safe.rb +15 -0
- data/test/shared/tests/dummy_app.rb +228 -0
- data/test/shared/tests/engine_test.rb +19 -0
- data/test/shared/tests/rails/engine_test.rb +13 -0
- data/test/shared/tests/readme_test.rb +13 -0
- metadata +231 -63
- data/.gitignore +0 -2
- data/lib/generators/rich/authlogic_user/authlogic_user_generator.rb +0 -64
- data/rails_generators/rich_authlogic_user/rich_authlogic_user_generator.rb +0 -64
- data/test/test_helper.rb +0 -6
@@ -1,8 +1,7 @@
|
|
1
|
-
|
2
1
|
$.extend({
|
3
2
|
ie: jQuery.browser.msie,
|
4
3
|
ie6: jQuery.browser.msie && parseInt(jQuery.browser.version, 10) == 6,
|
5
4
|
ie7: jQuery.browser.msie && parseInt(jQuery.browser.version, 10) == 7,
|
6
5
|
ie8: jQuery.browser.msie && parseInt(jQuery.browser.version, 10) == 8,
|
7
6
|
ff2: jQuery.browser.mozilla && parseFloat(jQuery.browser.version) < 1.9
|
8
|
-
});
|
7
|
+
});
|
@@ -0,0 +1,41 @@
|
|
1
|
+
/* Implement indexOf ourselves as IE does not support it */
|
2
|
+
if (!Array.prototype.indexOf)
|
3
|
+
{
|
4
|
+
Array.prototype.indexOf = function(searchElement /*, fromIndex */)
|
5
|
+
{
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
if (this === void 0 || this === null)
|
9
|
+
throw new TypeError();
|
10
|
+
|
11
|
+
var t = Object(this);
|
12
|
+
var len = t.length >>> 0;
|
13
|
+
if (len === 0)
|
14
|
+
return -1;
|
15
|
+
|
16
|
+
var n = 0;
|
17
|
+
if (arguments.length > 0)
|
18
|
+
{
|
19
|
+
n = Number(arguments[1]);
|
20
|
+
if (n !== n)
|
21
|
+
n = 0;
|
22
|
+
else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
|
23
|
+
n = (n > 0 || -1) * Math.floor(Math.abs(n));
|
24
|
+
}
|
25
|
+
|
26
|
+
if (n >= len)
|
27
|
+
return -1;
|
28
|
+
|
29
|
+
var k = n >= 0
|
30
|
+
? n
|
31
|
+
: Math.max(len - Math.abs(n), 0);
|
32
|
+
|
33
|
+
for (; k < len; k++)
|
34
|
+
{
|
35
|
+
if (k in t && t[k] === searchElement)
|
36
|
+
return k;
|
37
|
+
}
|
38
|
+
return -1;
|
39
|
+
};
|
40
|
+
}
|
41
|
+
|
@@ -11,6 +11,12 @@ Rich.Cms.Editor = (function() {
|
|
11
11
|
};
|
12
12
|
|
13
13
|
var bind = function() {
|
14
|
+
$("#rich_cms_panel .edit form fieldset.inputs div.keys a.toggler").live("click", function(event) {
|
15
|
+
event.preventDefault();
|
16
|
+
var toggler = $(event.target);
|
17
|
+
toggler.hide().closest(".keys").find("select[name=" + toggler.attr("data-name") + "]").show();
|
18
|
+
});
|
19
|
+
|
14
20
|
$("#rich_cms_panel .edit a.close").bind("click", function(event) {
|
15
21
|
event.preventDefault();
|
16
22
|
RaccoonTip.close();
|
@@ -18,7 +24,7 @@ Rich.Cms.Editor = (function() {
|
|
18
24
|
|
19
25
|
RaccoonTip.register("." + content_class + "." + mark_class, "#rich_cms_panel", {
|
20
26
|
beforeShow: edit,
|
21
|
-
canHide: function() { return !$("#cleditor_input").length },
|
27
|
+
canHide: function() { return !$("#cleditor_input").length; },
|
22
28
|
afterHide: function(content) { content.hide(); }
|
23
29
|
});
|
24
30
|
|
@@ -67,7 +73,7 @@ Rich.Cms.Editor = (function() {
|
|
67
73
|
|
68
74
|
var edit = function() {
|
69
75
|
var content_item = $(this).closest(".rich_cms_content");
|
70
|
-
var
|
76
|
+
var keys = $("#rich_cms_panel .edit form fieldset.inputs div.keys");
|
71
77
|
var inputs = $("#rich_cms_panel .edit form fieldset.inputs");
|
72
78
|
|
73
79
|
var attrs = content_item.get(0).attributes;
|
@@ -76,8 +82,7 @@ Rich.Cms.Editor = (function() {
|
|
76
82
|
})[0];
|
77
83
|
var specs = editable_content[selector];
|
78
84
|
|
79
|
-
|
80
|
-
|
85
|
+
keys.find("select,a,span").remove();
|
81
86
|
inputs.find(":input,div.cleditorMain").remove();
|
82
87
|
inputs.append("<input name='content_item[__selector__]' type='hidden' value='" + selector + "'/>");
|
83
88
|
|
@@ -99,11 +104,40 @@ Rich.Cms.Editor = (function() {
|
|
99
104
|
case "html":
|
100
105
|
inputs.append("<textarea id='cleditor_input' name='" + name + "' style='width: 500px; height: 300px'>" + value + "</textarea>"); break;
|
101
106
|
}
|
107
|
+
} else if (specs.keys.indexOf(attr) != -1) {
|
108
|
+
var available_keys = $.map(value.split(","), function(key) { return $.trim(key); });
|
109
|
+
var default_key = available_keys[0];
|
110
|
+
|
111
|
+
if (specs.keys.length > 1 && keys.find("select").length > 0) {
|
112
|
+
keys.append("<span>, <span>");
|
113
|
+
}
|
114
|
+
|
115
|
+
keys.append(available_keys.length == 1 ?
|
116
|
+
"<span>" + default_key + "<span>" :
|
117
|
+
"<a href='#' class='toggler' data-attr='" + attr + "' data-name='" + name + "'>" + default_key + "</a>");
|
118
|
+
keys.append("<select name='" + name + "' style='display: none'>" +
|
119
|
+
$.map(available_keys, function(key) { return "<option value='" + key + "'>" + key + "</option>"; }).join("") +
|
120
|
+
"</select>");
|
102
121
|
} else {
|
103
122
|
inputs.append("<input name='" + name + "' type='hidden' value='" + value + "'/>");
|
104
123
|
}
|
105
124
|
}
|
106
125
|
});
|
126
|
+
|
127
|
+
$("#rich_cms_panel .edit form fieldset.inputs div.keys select").bind("blur", function(event) {
|
128
|
+
var select = $(event.target);
|
129
|
+
var toggler = select.hide().closest(".keys").find(".toggler[data-name=" + select.attr("name") + "]").html(select.val()).show();
|
130
|
+
var values = [select.val()];
|
131
|
+
|
132
|
+
$.map(select.find("option"), function(option) {
|
133
|
+
var value = $(option).val();
|
134
|
+
if (value != values[0]) {
|
135
|
+
values.push(value);
|
136
|
+
}
|
137
|
+
});
|
138
|
+
|
139
|
+
content_item.attr(toggler.attr("data-attr"), values.join(", "));
|
140
|
+
});
|
107
141
|
|
108
142
|
if (specs.beforeEdit) {
|
109
143
|
var identifier = $.map(specs.keys, function(key) { return "[" + key + "=" + content_item.attr(key) + "]"; }).join("");
|
@@ -114,10 +148,10 @@ Rich.Cms.Editor = (function() {
|
|
114
148
|
|
115
149
|
setTimeout(function() {
|
116
150
|
if ($("#cleditor_input").length) {
|
117
|
-
$("#cleditor_input").cleditor({
|
151
|
+
$("#cleditor_input").data("cleditor", $("#cleditor_input").cleditor({
|
118
152
|
width : 500,
|
119
153
|
height: 300
|
120
|
-
})[0].focus();
|
154
|
+
})[0].focus());
|
121
155
|
}
|
122
156
|
}, 250);
|
123
157
|
};
|
@@ -125,7 +159,7 @@ Rich.Cms.Editor = (function() {
|
|
125
159
|
var afterUpdate = function(form, response) {
|
126
160
|
var selector = response["__selector__"];
|
127
161
|
var specs = editable_content[selector];
|
128
|
-
var identifier = $.map(specs.keys, function(key) { return "[" + key + "
|
162
|
+
var identifier = $.map(specs.keys, function(key) { return "[" + key + "^=" + response["__identifier__"][key.replace(/^data-/, "")] + "]"; }).join("");
|
129
163
|
|
130
164
|
var defaultFunction = function(form, response, selector, specs, identifier) {
|
131
165
|
$(identifier).html(response[specs.value.replace(/^data-/, "")]);
|
data/assets/jzip/rich_cms.jz
CHANGED
@@ -20,9 +20,19 @@
|
|
20
20
|
list-style: none
|
21
21
|
|
22
22
|
.inputs
|
23
|
+
|
24
|
+
div.keys
|
25
|
+
min-height: 21px
|
26
|
+
label
|
27
|
+
+inline
|
28
|
+
a, span
|
29
|
+
font-size: 12px
|
30
|
+
font-weight: bold
|
31
|
+
select
|
32
|
+
margin-right: 4px
|
33
|
+
|
23
34
|
label
|
24
35
|
font-size: 12px
|
25
|
-
+block
|
26
36
|
abbr
|
27
37
|
padding-left: 2px
|
28
38
|
border: 0
|
data/config/routes.rb
CHANGED
@@ -2,12 +2,14 @@ if Rails::VERSION::MAJOR >= 3
|
|
2
2
|
|
3
3
|
Rails.application.routes.draw do
|
4
4
|
scope :module => "rich" do
|
5
|
-
|
5
|
+
match "/cms/" => "cms#display" , :as => "rich_cms" , :display => true
|
6
|
+
match "/cms/hide" => "cms#display" , :as => "rich_cms_hide", :display => false
|
7
|
+
%w(login logout).each do |action|
|
8
|
+
match "/cms/#{action}" => "cms_sessions##{action}", :as => "rich_cms_#{action}"
|
9
|
+
end
|
10
|
+
%w(position update).each do |action|
|
6
11
|
match "/cms/#{action}" => "cms##{action}", :as => "rich_cms_#{action}"
|
7
12
|
end
|
8
|
-
match "/cms/" => "cms#display", :as => "rich_cms" , :display => true
|
9
|
-
match "/cms/hide" => "cms#display", :as => "rich_cms_hide", :display => false
|
10
|
-
match "/cms/position" => "cms#position"
|
11
13
|
end
|
12
14
|
end
|
13
15
|
|
@@ -21,15 +23,14 @@ else
|
|
21
23
|
|
22
24
|
ActionController::Routing::Routes.draw do |map|
|
23
25
|
map.namespace :rich, :path_prefix => "" do |rich|
|
24
|
-
|
25
|
-
|
26
|
+
rich.cms "cms" , :controller => "cms", :action => "display", :display => true
|
27
|
+
rich.cms_hide "cms/hide", :controller => "cms", :action => "display", :display => false
|
28
|
+
%w(login logout).each do |action|
|
29
|
+
rich.send "cms_#{action}", "cms/#{action}", :controller => "cms_sessions", :action => action
|
30
|
+
end
|
31
|
+
%w(position update).each do |action|
|
26
32
|
rich.send "cms_#{action}", "cms/#{action}", :controller => "cms", :action => action
|
27
33
|
end
|
28
|
-
|
29
|
-
rich.cms "cms" , :controller => "cms", :action => "display", :display => true
|
30
|
-
rich.cms_hide "cms/hide" , :controller => "cms", :action => "display", :display => false
|
31
|
-
rich.connect "cms/position", :controller => "cms", :action => "position"
|
32
|
-
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require "generators/rich_cms"
|
2
|
+
|
3
|
+
module Rich
|
4
|
+
module Generators
|
5
|
+
|
6
|
+
class CmsAdminGenerator < ::RichCms::Generators::Base
|
7
|
+
|
8
|
+
include Rails::Generators::Migration
|
9
|
+
include RichCms::Generators::Migration
|
10
|
+
|
11
|
+
desc "Creates Devise / Authlogic model and configures your Rails application for Rich-CMS authentication."
|
12
|
+
argument :model_name, :type => :string , :default => "user"
|
13
|
+
class_option :bundle , :type => :string , :default => false, :aliases => "-b", :desc => "Add Devise or Authlogic to Gemfile and run 'bundle install'."
|
14
|
+
class_option :devise , :type => :boolean, :default => true , :aliases => "-d", :desc => "Use Devise as authentication logic (this is default)."
|
15
|
+
class_option :authlogic , :type => :boolean, :default => false, :aliases => "-a", :desc => "Use Authlogic as authentication logic."
|
16
|
+
class_option :migrate , :type => :boolean, :default => false, :aliases => "-m", :desc => "Run 'rake db:migrate' after generating model and migration."
|
17
|
+
|
18
|
+
def derive_authentication_logic
|
19
|
+
@logic = "Devise"
|
20
|
+
@logic = "Authlogic" if options[:authlogic]
|
21
|
+
end
|
22
|
+
|
23
|
+
def register_authentication
|
24
|
+
filename = "config/initializers/enrichments.rb"
|
25
|
+
line = "Rich::Cms::Auth.setup do |config|"
|
26
|
+
|
27
|
+
create_file filename unless File.exists?(filename)
|
28
|
+
return if File.open(filename).readlines.collect(&:strip).include? line.strip
|
29
|
+
|
30
|
+
File.open(filename, "a+") do |file|
|
31
|
+
file << "#{line}\n"
|
32
|
+
file << " config.logic = :#{@logic.underscore}\n"
|
33
|
+
file << " config.klass = \"#{model_class_name}\"\n"
|
34
|
+
file << "end"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def generate_authenticated_model
|
39
|
+
if options[:bundle]
|
40
|
+
gem @logic.underscore, {"devise" => "~> 1.1.5", "authlogic" => "~> 2.1.6"}[@logic.underscore]
|
41
|
+
run "bundle install"
|
42
|
+
end
|
43
|
+
send :"generate_#{@logic.underscore}_assets"
|
44
|
+
end
|
45
|
+
|
46
|
+
def migrate
|
47
|
+
rake "db:migrate" if options[:migrate]
|
48
|
+
end
|
49
|
+
|
50
|
+
protected
|
51
|
+
|
52
|
+
def generate_devise_assets
|
53
|
+
generate "devise:install"
|
54
|
+
generate "devise", model_class_name
|
55
|
+
end
|
56
|
+
|
57
|
+
def generate_authlogic_assets
|
58
|
+
template "authlogic/model.rb" , "app/models/#{model_file_name}.rb"
|
59
|
+
template "authlogic/session.rb" , "app/models/#{model_file_name}_session.rb"
|
60
|
+
migration_template "authlogic/migration.rb", "db/migrate/create_#{table_name}"
|
61
|
+
end
|
62
|
+
|
63
|
+
def model_file_name
|
64
|
+
model_name.underscore
|
65
|
+
end
|
66
|
+
|
67
|
+
def model_class_name
|
68
|
+
model_name.classify
|
69
|
+
end
|
70
|
+
|
71
|
+
def migration_class_name
|
72
|
+
migration_file_name.pluralize.camelize
|
73
|
+
end
|
74
|
+
|
75
|
+
def table_name
|
76
|
+
model_file_name.underscore.gsub("/", "_").pluralize
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
data/lib/generators/rich/{authlogic_user/templates → cms_admin/templates/authlogic}/migration.rb
RENAMED
File without changes
|
data/lib/generators/rich/{authlogic_user/templates → cms_admin/templates/authlogic}/model.rb
RENAMED
File without changes
|
data/lib/generators/rich/{authlogic_user/templates → cms_admin/templates/authlogic}/session.rb
RENAMED
File without changes
|
@@ -1,14 +1,13 @@
|
|
1
|
-
|
2
1
|
module ActionController
|
3
2
|
class Base
|
4
3
|
|
5
4
|
around_filter :prepare_rich_cms
|
6
5
|
|
7
6
|
def prepare_rich_cms
|
8
|
-
::Rich::Cms::
|
7
|
+
::Rich::Cms::Auth.current_controller = self
|
9
8
|
yield
|
10
9
|
ensure
|
11
|
-
::Rich::Cms::
|
10
|
+
::Rich::Cms::Auth.current_controller = nil
|
12
11
|
end
|
13
12
|
|
14
13
|
view_path = File.expand_path "../../../../../../app/views", __FILE__
|
@@ -18,45 +17,5 @@ module ActionController
|
|
18
17
|
self.view_paths << view_path
|
19
18
|
end
|
20
19
|
|
21
|
-
helper_method :current_rich_cms_admin, :current_rich_cms_admin_name, :rich_cms_authenticated_class, :rich_cms_authentication_inputs
|
22
|
-
|
23
|
-
def require_current_rich_cms_admin
|
24
|
-
unless current_rich_cms_admin
|
25
|
-
redirect_to root_url
|
26
|
-
return false
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def current_rich_cms_admin
|
31
|
-
case rich_cms_auth.logic
|
32
|
-
when :authlogic
|
33
|
-
return @current_rich_cms_admin if defined?(@current_rich_cms_admin)
|
34
|
-
@current_rich_cms_admin_session ||= rich_cms_authenticated_class.find
|
35
|
-
@current_rich_cms_admin = @current_rich_cms_admin_session.try rich_cms_auth.specs[:class_name].demodulize.underscore
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def current_rich_cms_admin_name
|
40
|
-
current_rich_cms_admin[rich_cms_auth.specs[:identifier]] if current_rich_cms_admin
|
41
|
-
end
|
42
|
-
|
43
|
-
def rich_cms_auth
|
44
|
-
::Rich::Cms::Engine.authentication
|
45
|
-
end
|
46
|
-
|
47
|
-
def rich_cms_authenticated_class
|
48
|
-
case rich_cms_auth.logic
|
49
|
-
when :authlogic
|
50
|
-
"#{rich_cms_auth.specs[:class_name]}Session".constantize
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def rich_cms_authentication_inputs
|
55
|
-
case rich_cms_auth.logic
|
56
|
-
when :authlogic
|
57
|
-
rich_cms_auth.specs[:inputs] || [:email, :password]
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
20
|
end
|
62
|
-
end
|
21
|
+
end
|
@@ -1,23 +1,45 @@
|
|
1
|
-
|
2
1
|
module ActionView
|
3
2
|
class Base
|
4
3
|
|
5
4
|
def rich_cms
|
6
|
-
render :file => File.expand_path("../../../../../../app/views/rich_cms.html.erb", __FILE__) if
|
5
|
+
render :file => File.expand_path("../../../../../../app/views/rich_cms.html.erb", __FILE__) if !!session[:rich_cms].try(:fetch, :display, nil)
|
6
|
+
end
|
7
|
+
|
8
|
+
# //////////////////////////////////
|
9
|
+
# // Rich::Cms::Auth related
|
10
|
+
# //////////////////////////////////
|
11
|
+
|
12
|
+
def rich_cms_login_required?
|
13
|
+
Rich::Cms::Auth.login_required?
|
14
|
+
end
|
15
|
+
|
16
|
+
def rich_cms_admin_class
|
17
|
+
Rich::Cms::Auth.klass
|
7
18
|
end
|
8
19
|
|
9
|
-
def
|
10
|
-
|
20
|
+
def rich_cms_admin_inputs
|
21
|
+
Rich::Cms::Auth.inputs
|
11
22
|
end
|
12
23
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
24
|
+
def current_rich_cms_admin
|
25
|
+
Rich::Cms::Auth.admin
|
26
|
+
end
|
27
|
+
|
28
|
+
def current_rich_cms_admin_label
|
29
|
+
Rich::Cms::Auth.admin_label
|
30
|
+
end
|
31
|
+
|
32
|
+
# //////////////////////////////////
|
33
|
+
# // Rich::Cms::Engine related
|
34
|
+
# //////////////////////////////////
|
35
|
+
|
36
|
+
def rich_cms_editable_content_javascript_hash
|
37
|
+
"{#{Rich::Cms::Engine.editable_content.collect{|k, v| v.to_javascript_hash}.join ", "}}".html_safe
|
16
38
|
end
|
17
39
|
|
18
|
-
def rich_cms_tag(
|
19
|
-
Rich::Cms::Engine.
|
40
|
+
def rich_cms_tag(selector, identifiers, options = {})
|
41
|
+
Rich::Cms::Engine.editable_content[selector].fetch(identifiers).to_tag options
|
20
42
|
end
|
21
43
|
|
22
44
|
end
|
23
|
-
end
|
45
|
+
end
|
data/lib/rich/cms/actionpack.rb
CHANGED
@@ -0,0 +1,110 @@
|
|
1
|
+
module Rich
|
2
|
+
module Cms
|
3
|
+
module Auth
|
4
|
+
mattr_accessor :current_controller
|
5
|
+
|
6
|
+
extend self
|
7
|
+
|
8
|
+
delegate :logic, :klass, :klass_symbol, :inputs, :to => :specs
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@specs = Specs.new
|
12
|
+
yield specs
|
13
|
+
end
|
14
|
+
|
15
|
+
def enabled?
|
16
|
+
!!specs.logic
|
17
|
+
end
|
18
|
+
|
19
|
+
def login_required?
|
20
|
+
enabled? && admin.nil?
|
21
|
+
end
|
22
|
+
|
23
|
+
def login
|
24
|
+
case specs.logic
|
25
|
+
when :authlogic
|
26
|
+
user_session = "#{klass.name}Session".constantize.new params[klass_symbol]
|
27
|
+
user_session.save
|
28
|
+
when :devise
|
29
|
+
case Devise::VERSION
|
30
|
+
when "1.0.8", "1.0.9"
|
31
|
+
warden.authenticate(:scope => klass_symbol)
|
32
|
+
when "1.1.5"
|
33
|
+
begin
|
34
|
+
sessions = Devise.mappings[klass_symbol].controllers[:sessions]
|
35
|
+
Devise.mappings[klass_symbol].controllers[:sessions] = "rich/cms_sessions"
|
36
|
+
warden.authenticate(:scope => klass_symbol)
|
37
|
+
ensure
|
38
|
+
Devise.mappings[klass_symbol].controllers[:sessions] = sessions
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end if enabled?
|
42
|
+
!!admin
|
43
|
+
end
|
44
|
+
|
45
|
+
def logout
|
46
|
+
case specs.logic
|
47
|
+
when :authlogic
|
48
|
+
user_session = "#{klass.name}Session".constantize.find
|
49
|
+
user_session.try :destroy
|
50
|
+
when :devise
|
51
|
+
sign_out klass_symbol
|
52
|
+
end if enabled?
|
53
|
+
session[:rich_cms] = nil
|
54
|
+
end
|
55
|
+
|
56
|
+
def admin
|
57
|
+
case specs.logic
|
58
|
+
when :authlogic
|
59
|
+
user_session = "#{klass.name}Session".constantize.find
|
60
|
+
user_session.try klass_symbol
|
61
|
+
when :devise
|
62
|
+
current_controller.try :send, specs.current_admin_method if enabled? && specs.current_admin_method
|
63
|
+
end if enabled?
|
64
|
+
end
|
65
|
+
|
66
|
+
def admin_label
|
67
|
+
(admin.try(:send, specs.identifier) if enabled?) || "Rich-CMS"
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
delegate :sign_out, :warden, :params, :session, :to => :current_controller
|
73
|
+
|
74
|
+
def specs
|
75
|
+
@specs ||= Specs.new
|
76
|
+
end
|
77
|
+
|
78
|
+
class Specs
|
79
|
+
attr_accessor :logic, :klass, :inputs, :identifier, :current_admin_method
|
80
|
+
|
81
|
+
def klass
|
82
|
+
return unless [:devise, :authlogic].include? logic
|
83
|
+
case @klass.class.name
|
84
|
+
when "String"
|
85
|
+
@klass.constantize
|
86
|
+
when "Class"
|
87
|
+
@klass
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def klass_symbol
|
92
|
+
klass.name.underscore.gsub("/", "_").to_sym if klass
|
93
|
+
end
|
94
|
+
|
95
|
+
def inputs
|
96
|
+
@inputs || [:email, :password] if klass
|
97
|
+
end
|
98
|
+
|
99
|
+
def identifier
|
100
|
+
@identifier || inputs.first if klass
|
101
|
+
end
|
102
|
+
|
103
|
+
def current_admin_method
|
104
|
+
@current_admin_method || :"current_#{klass_symbol}" if klass
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
module Rich
|
3
2
|
module Cms
|
4
3
|
module Content
|
@@ -49,7 +48,7 @@ module Rich
|
|
49
48
|
default = @group.identifiers.size == 1 ? @object.send(@group.identifiers.first) : @object.attributes.values_at(*@group.identifiers).inspect
|
50
49
|
value = @object.send(@group.value)
|
51
50
|
|
52
|
-
|
51
|
+
unless Auth.login_required?
|
53
52
|
default = "< #{default} >"
|
54
53
|
keys = @group.keys << @group.value.to_s
|
55
54
|
data = @object.attributes.reject{|k, v| !keys.include?(k.to_s)}
|
@@ -73,4 +72,4 @@ module Rich
|
|
73
72
|
|
74
73
|
end
|
75
74
|
end
|
76
|
-
end
|
75
|
+
end
|