caboose-cms 0.4.64 → 0.4.65
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 +8 -8
- data/app/assets/stylesheets/caboose/admin.css +5 -3
- data/app/controllers/caboose/pages_controller.rb +10 -0
- data/app/controllers/caboose/redirects_controller.rb +108 -0
- data/app/models/caboose/permanent_redirect.rb +19 -2
- data/app/models/caboose/schema.rb +7 -0
- data/app/models/caboose/site.rb +6 -0
- data/app/views/caboose/redirects/admin_edit.html.erb +59 -0
- data/app/views/caboose/redirects/admin_index.html.erb +24 -0
- data/app/views/caboose/redirects/admin_new.html.erb +38 -0
- data/config/routes.rb +9 -2
- data/lib/caboose/version.rb +1 -1
- data/lib/tasks/caboose.rake +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Y2RmZGE5OTAwODg2Yzc5MjA1NzU0ZDY0MTQxOWE4Yjk4NDY2M2QyMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Zjc1YjVjYzJkNGM2MTAzNGMzYzQ0ZjM2OTJjZDE1YWVkNWM3YzUyOQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NDMyYWY4NTY4NzU2NWMyYTU5NzM5MDBhOWRlZDViODA4NWFkNmRlMzQ1OTU3
|
10
|
+
ZTVmNmZiY2NkNjRjNWQxNWRkYTdhNDUwNTBkNjlkMjY3NTFmNDkxMDQ2NzNl
|
11
|
+
NzM4NWEwYWQ2MjdiNTFjYzc3ZGFlNTBjN2M4YjY5NDliN2Y5OWQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NTUxYmUzZjY2N2VlZGEzNjViZDYwODIyZWM0ODZkYzA4YjM2MzM0MWUyMWI0
|
14
|
+
MjFjZDRkMzYwMmI3YzU5OGEzNTYzNjE0YjkzMzFhY2JlNDZlNzA2YTY1OTZj
|
15
|
+
YzkyYTBjNGYxZGU4YmEzMTI2MTFjOGZjMzg2YTE2MWE5NzdmZjA=
|
@@ -257,12 +257,14 @@ select.fake option {
|
|
257
257
|
color: #757575;
|
258
258
|
}
|
259
259
|
|
260
|
-
#content input[type='checkbox'] {
|
260
|
+
#content .mb_container input[type='checkbox'] {
|
261
261
|
position: absolute;
|
262
262
|
top: 4px;
|
263
263
|
left: 0;
|
264
|
-
z-index: 19;
|
265
|
-
|
264
|
+
z-index: 19;
|
265
|
+
}
|
266
|
+
|
267
|
+
#content input[type='checkbox'] {
|
266
268
|
margin: 0;
|
267
269
|
padding: 0;
|
268
270
|
width: 20px;
|
@@ -53,6 +53,16 @@ module Caboose
|
|
53
53
|
|
54
54
|
page = Page.page_with_uri(request.host_with_port, File.dirname(uri), false)
|
55
55
|
if (page.nil? || !page)
|
56
|
+
|
57
|
+
# Check for a 301 redirect
|
58
|
+
site_id = Site.id_for_domain(request.host_with_port)
|
59
|
+
new_url = PermanentRedirect.match(site_id, request.fullpath)
|
60
|
+
if new_url
|
61
|
+
Caboose.log("Found a redirect: #{new_url}")
|
62
|
+
redirect_to new_url
|
63
|
+
return
|
64
|
+
end
|
65
|
+
|
56
66
|
respond_to do |format|
|
57
67
|
format.all { render :file => "caboose/extras/error404", :layout => "caboose/error404", :formats => [:html] }
|
58
68
|
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
|
2
|
+
module Caboose
|
3
|
+
class RedirectsController < ApplicationController
|
4
|
+
|
5
|
+
helper :application
|
6
|
+
|
7
|
+
def before_action
|
8
|
+
@page = Page.page_with_uri(request.host_with_port, '/admin')
|
9
|
+
end
|
10
|
+
|
11
|
+
#===========================================================================
|
12
|
+
# Admin actions
|
13
|
+
#===========================================================================
|
14
|
+
|
15
|
+
# GET /admin/redirects
|
16
|
+
def admin_index
|
17
|
+
return if !user_is_allowed('redirects', 'view')
|
18
|
+
@domain = Domain.where(:domain => request.host_with_port).first
|
19
|
+
@redirects = @domain ? PermanentRedirect.where(:site_id => @domain.site_id).reorder(:priority).all : []
|
20
|
+
render :layout => 'caboose/admin'
|
21
|
+
end
|
22
|
+
|
23
|
+
# GET /admin/redirects/new
|
24
|
+
def admin_new
|
25
|
+
return unless user_is_allowed('redirects', 'add')
|
26
|
+
render :layout => 'caboose/admin'
|
27
|
+
end
|
28
|
+
|
29
|
+
# GET /admin/redirects/:id
|
30
|
+
def admin_edit
|
31
|
+
return unless user_is_allowed('redirects', 'edit')
|
32
|
+
@permanent_redirect = PermanentRedirect.find(params[:id])
|
33
|
+
render :layout => 'caboose/admin'
|
34
|
+
end
|
35
|
+
|
36
|
+
# PUT /admin/redirects/priority
|
37
|
+
def admin_update_priority
|
38
|
+
return unless user_is_allowed('redirects', 'edit')
|
39
|
+
@page = Page.find(params[:id])
|
40
|
+
ids = params[:ids]
|
41
|
+
i = 0
|
42
|
+
ids.each do |prid|
|
43
|
+
pr = PermanentRedirect.find(prid)
|
44
|
+
pr.priority = i
|
45
|
+
pr.save
|
46
|
+
i = i + 1
|
47
|
+
end
|
48
|
+
render :json => true
|
49
|
+
end
|
50
|
+
|
51
|
+
# POST /admin/redirects
|
52
|
+
def admin_add
|
53
|
+
return unless user_is_allowed('redirects', 'add')
|
54
|
+
|
55
|
+
resp = Caboose::StdClass.new
|
56
|
+
|
57
|
+
pr = PermanentRedirect.new
|
58
|
+
pr.site_id = Site.id_for_domain(request.host_with_port)
|
59
|
+
pr.is_regex = false
|
60
|
+
pr.old_url = params[:old_url]
|
61
|
+
pr.new_url = params[:new_url]
|
62
|
+
pr.priority = 0
|
63
|
+
|
64
|
+
if !pr.valid?
|
65
|
+
resp.error = pr.errors.first[1]
|
66
|
+
else
|
67
|
+
pr.save
|
68
|
+
resp.redirect = "/admin/redirects/#{pr.id}"
|
69
|
+
end
|
70
|
+
|
71
|
+
render :json => resp
|
72
|
+
end
|
73
|
+
|
74
|
+
# PUT /admin/redirects/:id
|
75
|
+
def admin_update
|
76
|
+
return unless user_is_allowed('redirects', 'edit')
|
77
|
+
|
78
|
+
resp = StdClass.new
|
79
|
+
pr = PermanentRedirect.find(params[:id])
|
80
|
+
|
81
|
+
save = true
|
82
|
+
params.each do |name, value|
|
83
|
+
case name
|
84
|
+
when 'is_regex' then pr.is_regex = value
|
85
|
+
when 'old_url' then pr.old_url = value
|
86
|
+
when 'new_url' then pr.new_url = value
|
87
|
+
when 'priority' then pr.priority = value
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
resp.success = save && pr.save
|
92
|
+
render :json => resp
|
93
|
+
end
|
94
|
+
|
95
|
+
# DELETE /admin/redirects/:id
|
96
|
+
def admin_delete
|
97
|
+
return unless user_is_allowed('redirects', 'delete')
|
98
|
+
pr = PermanentRedirect.find(params[:id])
|
99
|
+
pr.destroy
|
100
|
+
|
101
|
+
resp = StdClass.new({
|
102
|
+
'redirect' => '/admin/redirects'
|
103
|
+
})
|
104
|
+
render :json => resp
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
@@ -2,8 +2,25 @@
|
|
2
2
|
class Caboose::PermanentRedirect < ActiveRecord::Base
|
3
3
|
self.table_name = "permanent_redirects"
|
4
4
|
|
5
|
-
attr_accessible
|
5
|
+
attr_accessible :id,
|
6
|
+
:site_id,
|
7
|
+
:priority,
|
8
|
+
:is_regex,
|
9
|
+
:old_url,
|
10
|
+
:new_url
|
6
11
|
|
12
|
+
validates :old_url, :presence => { :message => 'The old URL is required.' }
|
13
|
+
validates :new_url, :presence => { :message => 'The new URL is required.' }
|
14
|
+
|
15
|
+
def self.match(site_id, uri)
|
16
|
+
Caboose::PermanentRedirect.where(:site_id => site_id).reorder(:priority).all.each do |pr|
|
17
|
+
if pr.is_regex
|
18
|
+
return uri.gsub(/#{pr.old_url}/, pr.new_url) if uri =~ /#{pr.old_url}/
|
19
|
+
else
|
20
|
+
return pr.new_url if uri == pr.old_url
|
21
|
+
end
|
22
|
+
end
|
23
|
+
return false
|
24
|
+
end
|
7
25
|
|
8
|
-
|
9
26
|
end
|
@@ -173,6 +173,13 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
173
173
|
[ :page_id , :integer ],
|
174
174
|
[ :action , :string ]
|
175
175
|
],
|
176
|
+
Caboose::PermanentRedirect => [
|
177
|
+
[ :site_id , :integer ],
|
178
|
+
[ :priority , :integer , { :default => 0 }],
|
179
|
+
[ :is_regex , :boolean , { :default => false }],
|
180
|
+
[ :old_url , :string ],
|
181
|
+
[ :new_url , :string ]
|
182
|
+
],
|
176
183
|
Caboose::Permission => [
|
177
184
|
[ :resource , :string ],
|
178
185
|
[ :action , :string ]
|
data/app/models/caboose/site.rb
CHANGED
@@ -10,4 +10,10 @@ class Caboose::Site < ActiveRecord::Base
|
|
10
10
|
c = Caboose::SmtpConfig.where(:site_id => self.id).first
|
11
11
|
end
|
12
12
|
|
13
|
+
def self.id_for_domain(domain)
|
14
|
+
d = Caboose::Domain.where(:domain => domain).first
|
15
|
+
return nil if d.nil?
|
16
|
+
return d.site_id
|
17
|
+
end
|
18
|
+
|
13
19
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<%
|
2
|
+
pr = @permanent_redirect
|
3
|
+
%>
|
4
|
+
<h1>Edit Permanent Redirect</h1>
|
5
|
+
|
6
|
+
<p><div id='permanentredirect_<%= pr.id %>_priority' ></div></p>
|
7
|
+
<p><div id='permanentredirect_<%= pr.id %>_is_regex' ></div></p>
|
8
|
+
<p><div id='permanentredirect_<%= pr.id %>_old_url' ></div></p>
|
9
|
+
<p><div id='permanentredirect_<%= pr.id %>_new_url' ></div></p>
|
10
|
+
|
11
|
+
<div id='message'></div>
|
12
|
+
<div id='controls'>
|
13
|
+
<input type='button' value='Back' onclick="window.location='/admin/redirects';" />
|
14
|
+
<input type='button' value='Delete Redirect' onclick="delete_redirect(<%= pr.id %>);" />
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<% content_for :caboose_js do %>
|
18
|
+
<%= javascript_include_tag "caboose/model/all" %>
|
19
|
+
<script type="text/javascript">
|
20
|
+
|
21
|
+
$(document).ready(function() {
|
22
|
+
new ModelBinder({
|
23
|
+
name: 'PermanentRedirect',
|
24
|
+
id: <%= pr.id %>,
|
25
|
+
update_url: '/admin/redirects/<%= pr.id %>',
|
26
|
+
authenticity_token: '<%= form_authenticity_token %>',
|
27
|
+
attributes: [
|
28
|
+
{ name: 'priority' , nice_name: 'Priority' , type: 'text' , value: <%= raw Caboose.json(pr.priority) %>, width: 400 },
|
29
|
+
{ name: 'is_regex' , nice_name: 'Regex' , type: 'checkbox' , value: <%= pr.is_regex ? 1 : 0 %>, width: 400 },
|
30
|
+
{ name: 'old_url' , nice_name: 'Old URL' , type: 'text' , value: <%= raw Caboose.json(pr.old_url) %>, width: 400 },
|
31
|
+
{ name: 'new_url' , nice_name: 'New URL' , type: 'text' , value: <%= raw Caboose.json(pr.new_url) %>, width: 400 }
|
32
|
+
]
|
33
|
+
});
|
34
|
+
});
|
35
|
+
|
36
|
+
function delete_redirect(pr_id, confirm)
|
37
|
+
{
|
38
|
+
if (!confirm)
|
39
|
+
{
|
40
|
+
var p = $('<p/>').addClass('note confirm')
|
41
|
+
.append('Are you sure you want to delete the redirect? ')
|
42
|
+
.append($('<input/>').attr('type','button').val('Yes').click(function() { delete_redirect(pr_id, true); })).append(' ')
|
43
|
+
.append($('<input/>').attr('type','button').val('No').click(function() { $('#message').empty(); }));
|
44
|
+
$('#message').empty().append(p);
|
45
|
+
return;
|
46
|
+
}
|
47
|
+
$('#message').html("<p class='loading'>Deleting redirect...</p>");
|
48
|
+
$.ajax({
|
49
|
+
url: '/admin/redirects/' + pr_id,
|
50
|
+
type: 'delete',
|
51
|
+
success: function(resp) {
|
52
|
+
if (resp.error) $('#message').html("<p class='note error'>" + resp.error + "</p>");
|
53
|
+
if (resp.redirect) window.location = resp.redirect;
|
54
|
+
}
|
55
|
+
});
|
56
|
+
}
|
57
|
+
|
58
|
+
</script>
|
59
|
+
<% end %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<h1>Permanent Redirects</h1>
|
2
|
+
|
3
|
+
<p><a href='/admin/redirects/new'>New Redirect</a></p>
|
4
|
+
|
5
|
+
<% if @redirects && @redirects.count > 0 %>
|
6
|
+
<table class='data'>
|
7
|
+
<tr>
|
8
|
+
<th>Priority</th>
|
9
|
+
<th>Is Regex</th>
|
10
|
+
<th>Old URL</th>
|
11
|
+
<th>New URL</th>
|
12
|
+
</tr>
|
13
|
+
<% @redirects.each do |pr| %>
|
14
|
+
<tr onclick="window.location='/admin/redirects/<%= pr.id %>';">
|
15
|
+
<td align='right'><%= pr.priority %></td>
|
16
|
+
<td><%= pr.is_regex ? 'Yes' : 'No' %></td>
|
17
|
+
<td><%= raw pr.old_url %></td>
|
18
|
+
<td><%= raw pr.new_url %></td>
|
19
|
+
</tr>
|
20
|
+
<% end %>
|
21
|
+
</table>
|
22
|
+
<% else %>
|
23
|
+
<p>There are no redirects right now.</p>
|
24
|
+
<% end %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
<h1>New Permanent Redirect</h1>
|
3
|
+
|
4
|
+
<form action='/admin/redirects' method='post' id='new_redirect_form'>
|
5
|
+
<input type='hidden' name='authenticity_token' value='<%= form_authenticity_token %>' />
|
6
|
+
<p>Regular expression? <input type='checkbox' name='is_regex' value='1' /></p>
|
7
|
+
<p><input type='text' name='old_url' id='old_url' placeholder='Old URL' value='' style='width: 400px;' /></p>
|
8
|
+
<p><input type='text' name='new_url' id='new_url' placeholder='New URL' value='' style='width: 400px;' /></p>
|
9
|
+
<div id='message'></div>
|
10
|
+
<p>
|
11
|
+
<input type='button' value='< Back' onclick="window.location='/admin/redirects';" />
|
12
|
+
<input type='submit' value='Add Redirect' />
|
13
|
+
</p>
|
14
|
+
</form>
|
15
|
+
|
16
|
+
<% content_for :caboose_js do %>
|
17
|
+
<script type='text/javascript'>
|
18
|
+
|
19
|
+
$(document).ready(function() {
|
20
|
+
$('#new_redirect_form').submit(function() { add_redirect(); return false; });
|
21
|
+
});
|
22
|
+
|
23
|
+
function add_redirect()
|
24
|
+
{
|
25
|
+
$('#message').html("<p class='loading'>Adding redirect...</p>");
|
26
|
+
$.ajax({
|
27
|
+
url: '/admin/redirects',
|
28
|
+
type: 'post',
|
29
|
+
data: $('#new_redirect_form').serialize(),
|
30
|
+
success: function(resp) {
|
31
|
+
if (resp.error) $('#message').html("<p class='note error'>" + resp.error + "</p>");
|
32
|
+
if (resp.redirect) window.location = resp.redirect;
|
33
|
+
}
|
34
|
+
});
|
35
|
+
}
|
36
|
+
|
37
|
+
</script>
|
38
|
+
<% end %>
|
data/config/routes.rb
CHANGED
@@ -27,14 +27,21 @@ Caboose::Engine.routes.draw do
|
|
27
27
|
post "admin/sites/:id/domains" => "sites#admin_add_domain"
|
28
28
|
put "admin/sites/:id/domains/:domain_id/set-primary" => "sites#admin_set_primary_domain"
|
29
29
|
delete "admin/sites/:id/domains/:domain_id" => "sites#admin_remove_domain"
|
30
|
-
|
30
|
+
|
31
31
|
get "admin/sites/options" => "sites#options"
|
32
32
|
get "admin/sites" => "sites#admin_index"
|
33
33
|
get "admin/sites/new" => "sites#admin_new"
|
34
34
|
get "admin/sites/:id" => "sites#admin_edit"
|
35
35
|
put "admin/sites/:id" => "sites#admin_update"
|
36
36
|
post "admin/sites" => "sites#admin_add"
|
37
|
-
delete "admin/sites/:id" => "sites#admin_delete"
|
37
|
+
delete "admin/sites/:id" => "sites#admin_delete"
|
38
|
+
|
39
|
+
get "admin/redirects" => "redirects#admin_index"
|
40
|
+
get "admin/redirects/new" => "redirects#admin_new"
|
41
|
+
get "admin/redirects/:id" => "redirects#admin_edit"
|
42
|
+
put "admin/redirects/:id" => "redirects#admin_update"
|
43
|
+
post "admin/redirects" => "redirects#admin_add"
|
44
|
+
delete "admin/redirects/:id" => "redirects#admin_delete"
|
38
45
|
|
39
46
|
get "admin/users" => "users#index"
|
40
47
|
get "admin/users/options" => "users#options"
|
data/lib/caboose/version.rb
CHANGED
data/lib/tasks/caboose.rake
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.65
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -264,6 +264,7 @@ files:
|
|
264
264
|
- app/controllers/caboose/pages_controller.rb
|
265
265
|
- app/controllers/caboose/permissions_controller.rb
|
266
266
|
- app/controllers/caboose/posts_controller.rb
|
267
|
+
- app/controllers/caboose/redirects_controller.rb
|
267
268
|
- app/controllers/caboose/register_controller.rb
|
268
269
|
- app/controllers/caboose/roles_controller.rb
|
269
270
|
- app/controllers/caboose/settings_controller.rb
|
@@ -414,6 +415,9 @@ files:
|
|
414
415
|
- app/views/caboose/posts/admin_new.html.erb
|
415
416
|
- app/views/caboose/posts/detail.html.erb
|
416
417
|
- app/views/caboose/posts/index.html.erb
|
418
|
+
- app/views/caboose/redirects/admin_edit.html.erb
|
419
|
+
- app/views/caboose/redirects/admin_index.html.erb
|
420
|
+
- app/views/caboose/redirects/admin_new.html.erb
|
417
421
|
- app/views/caboose/register/index.html.erb
|
418
422
|
- app/views/caboose/roles/edit.html.erb
|
419
423
|
- app/views/caboose/roles/index.html.erb
|