cortex-reaver 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -1
- data/bin/cortex_reaver +3 -4
- data/lib/cortex_reaver.rb +270 -110
- data/lib/cortex_reaver/cache.rb +23 -0
- data/lib/cortex_reaver/config.rb +178 -74
- data/lib/cortex_reaver/controller/admin.rb +64 -4
- data/lib/cortex_reaver/controller/comment.rb +4 -4
- data/lib/cortex_reaver/controller/controller.rb +3 -3
- data/lib/cortex_reaver/controller/journal.rb +4 -2
- data/lib/cortex_reaver/controller/main.rb +117 -26
- data/lib/cortex_reaver/controller/page.rb +7 -0
- data/lib/cortex_reaver/controller/photograph.rb +12 -10
- data/lib/cortex_reaver/controller/tag.rb +1 -1
- data/lib/cortex_reaver/controller/user.rb +7 -2
- data/lib/cortex_reaver/helper/attachments.rb +2 -2
- data/lib/cortex_reaver/helper/crud.rb +7 -7
- data/lib/cortex_reaver/helper/feeds.rb +56 -38
- data/lib/cortex_reaver/helper/form.rb +12 -16
- data/lib/cortex_reaver/helper/navigation.rb +35 -16
- data/lib/cortex_reaver/helper/photographs.rb +2 -2
- data/lib/cortex_reaver/helper/sidebar.rb +44 -0
- data/lib/cortex_reaver/helper/tags.rb +32 -9
- data/lib/cortex_reaver/helper/workflow.rb +2 -14
- data/lib/cortex_reaver/layout/blank.rhtml +27 -31
- data/lib/cortex_reaver/layout/text.rhtml +54 -67
- data/lib/cortex_reaver/migrations/014_convert_projects_to_pages.rb +79 -0
- data/lib/cortex_reaver/model/comment.rb +7 -8
- data/lib/cortex_reaver/model/page.rb +5 -3
- data/lib/cortex_reaver/model/photograph.rb +57 -13
- data/lib/cortex_reaver/model/tag.rb +1 -4
- data/lib/cortex_reaver/model/user.rb +6 -3
- data/lib/cortex_reaver/plugin.rb +1 -1
- data/lib/cortex_reaver/plugins/twitter.rb +185 -0
- data/lib/cortex_reaver/public/css/actions.css +31 -0
- data/lib/cortex_reaver/public/css/admin.css +50 -27
- data/lib/cortex_reaver/public/css/attachments.css +11 -0
- data/lib/cortex_reaver/public/css/autotags.css +38 -0
- data/lib/cortex_reaver/public/css/code.css +10 -2
- data/lib/cortex_reaver/public/css/colophon.css +10 -0
- data/lib/cortex_reaver/public/css/commments.css +7 -0
- data/lib/cortex_reaver/public/css/custom.css +1 -0
- data/lib/cortex_reaver/public/css/flash.css +17 -0
- data/lib/cortex_reaver/public/css/fonts.css +22 -0
- data/lib/cortex_reaver/public/css/form.css +15 -3
- data/lib/cortex_reaver/public/css/generics.css +39 -0
- data/lib/cortex_reaver/public/css/icons.css +4 -0
- data/lib/cortex_reaver/public/css/journals.css +3 -0
- data/lib/cortex_reaver/public/css/main.css +30 -312
- data/lib/cortex_reaver/public/css/pagination.css +50 -0
- data/lib/cortex_reaver/public/css/photo-show.css +87 -0
- data/lib/cortex_reaver/public/css/photo.css +28 -97
- data/lib/cortex_reaver/public/css/progress.css +35 -0
- data/lib/cortex_reaver/public/css/sidebar.css +83 -0
- data/lib/cortex_reaver/public/css/table-of-contents.css +26 -0
- data/lib/cortex_reaver/public/css/table.css +3 -0
- data/lib/cortex_reaver/public/css/tags.css +29 -0
- data/lib/cortex_reaver/public/css/text.css +19 -1
- data/lib/cortex_reaver/public/css/top_actions.css +50 -0
- data/lib/cortex_reaver/public/css/users.css +3 -0
- data/lib/cortex_reaver/public/images/admin/icons.png +0 -0
- data/lib/cortex_reaver/public/images/admin/icons.xcf +0 -0
- data/lib/cortex_reaver/public/images/background_tile.png +0 -0
- data/lib/cortex_reaver/public/images/edit_34.png +0 -0
- data/lib/cortex_reaver/public/images/edit_34_prelight.png +0 -0
- data/lib/cortex_reaver/public/images/elided.png +0 -0
- data/lib/cortex_reaver/public/images/grid_34.png +0 -0
- data/lib/cortex_reaver/public/images/grid_34_prelight.png +0 -0
- data/lib/cortex_reaver/public/images/next_11.png +0 -0
- data/lib/cortex_reaver/public/images/next_34.png +0 -0
- data/lib/cortex_reaver/public/images/next_34_prelight.png +0 -0
- data/lib/cortex_reaver/public/images/prev_11.png +0 -0
- data/lib/cortex_reaver/public/images/prev_34.png +0 -0
- data/lib/cortex_reaver/public/images/prev_34_prelight.png +0 -0
- data/lib/cortex_reaver/public/js/admin.js +15 -22
- data/lib/cortex_reaver/public/js/autotags.js +120 -0
- data/lib/cortex_reaver/public/js/jquery.autocomplete.js +135 -176
- data/lib/cortex_reaver/public/js/jquery.color.js +124 -0
- data/lib/cortex_reaver/public/js/jquery.corners.min.js +7 -0
- data/lib/cortex_reaver/public/js/jquery.hotkeys-0.7.9.js +244 -0
- data/lib/cortex_reaver/public/js/jquery.js +4361 -4
- data/lib/cortex_reaver/public/js/jquery.periodicalupdater.js +98 -0
- data/lib/cortex_reaver/public/js/photo.js +3 -32
- data/lib/cortex_reaver/public/robots.txt +3 -0
- data/lib/cortex_reaver/snippets/ramaze/cache/memcached.rb +13 -10
- data/lib/cortex_reaver/snippets/range.rb +9 -0
- data/lib/cortex_reaver/support/attachments.rb +12 -0
- data/lib/cortex_reaver/support/comments.rb +1 -3
- data/lib/cortex_reaver/support/renderer.rb +20 -17
- data/lib/cortex_reaver/support/sequenceable.rb +6 -6
- data/lib/cortex_reaver/support/tags.rb +15 -7
- data/lib/cortex_reaver/version.rb +1 -1
- data/lib/cortex_reaver/view/admin/configuration.rhtml +7 -0
- data/lib/cortex_reaver/view/admin/index.rhtml +3 -0
- data/lib/cortex_reaver/view/admin/regenerate_photo_sizes.rhtml +16 -0
- data/lib/cortex_reaver/view/adminbox.rhtml +34 -44
- data/lib/cortex_reaver/view/comments/comment.rhtml +1 -1
- data/lib/cortex_reaver/view/comments/form.rhtml +1 -2
- data/lib/cortex_reaver/view/comments/post_form.rhtml +2 -10
- data/lib/cortex_reaver/view/head.rhtml +11 -0
- data/lib/cortex_reaver/view/journals/journal.rhtml +3 -3
- data/lib/cortex_reaver/view/journals/show.rhtml +0 -4
- data/lib/cortex_reaver/view/js.rhtml +1 -0
- data/lib/cortex_reaver/view/pages/list.rhtml +3 -23
- data/lib/cortex_reaver/view/pages/row.rhtml +13 -0
- data/lib/cortex_reaver/view/photographs/grid.rhtml +30 -36
- data/lib/cortex_reaver/view/photographs/show.rhtml +42 -108
- data/lib/cortex_reaver/view/sidebar/explore_photos.rhtml +7 -0
- data/lib/cortex_reaver/view/sidebar/photographs.rhtml +15 -0
- data/lib/cortex_reaver/view/sidebar/sections.rhtml +4 -0
- data/lib/cortex_reaver/view/sidebar/twitter.rhtml +12 -0
- data/lib/cortex_reaver/view/tags/show.rhtml +0 -10
- data/lib/cortex_reaver/view/tracker.rhtml +0 -0
- data/lib/cortex_reaver/view/users/list.rhtml +1 -7
- data/lib/cortex_reaver/view/users/login.rhtml +1 -1
- metadata +103 -43
- data/lib/cortex_reaver/controller/project.rb +0 -53
- data/lib/cortex_reaver/helper/template.rb +0 -37
- data/lib/cortex_reaver/model/project.rb +0 -57
- data/lib/cortex_reaver/public/css/ramaze_error.css +0 -90
- data/lib/cortex_reaver/public/images/atom-xml-icon.png +0 -0
- data/lib/cortex_reaver/public/images/body.png +0 -0
- data/lib/cortex_reaver/public/images/border_bottom.png +0 -0
- data/lib/cortex_reaver/public/images/border_bottom_left.png +0 -0
- data/lib/cortex_reaver/public/images/border_bottom_right.png +0 -0
- data/lib/cortex_reaver/public/images/border_left.png +0 -0
- data/lib/cortex_reaver/public/images/border_right.png +0 -0
- data/lib/cortex_reaver/public/images/border_top.png +0 -0
- data/lib/cortex_reaver/public/images/border_top_left.png +0 -0
- data/lib/cortex_reaver/public/images/border_top_right.png +0 -0
- data/lib/cortex_reaver/public/images/header.png +0 -0
- data/lib/cortex_reaver/public/images/header.xcf +0 -0
- data/lib/cortex_reaver/public/images/indicator.gif +0 -0
- data/lib/cortex_reaver/public/images/rss-xml-icon.png +0 -0
- data/lib/cortex_reaver/public/images/sections.png +0 -0
- data/lib/cortex_reaver/public/images/sections_highlight.png +0 -0
- data/lib/cortex_reaver/public/js/jquery.autocompletefb.js +0 -125
- data/lib/cortex_reaver/view/photographs/sidebar.rhtml +0 -7
- data/lib/cortex_reaver/view/projects/form.rhtml +0 -14
- data/lib/cortex_reaver/view/projects/list.rhtml +0 -31
- data/lib/cortex_reaver/view/projects/show.rhtml +0 -42
- data/lib/proto/cortex_reaver.yaml +0 -47
@@ -1,11 +1,25 @@
|
|
1
|
-
require '
|
1
|
+
require 'libxml'
|
2
2
|
|
3
3
|
module CortexReaver
|
4
4
|
class MainController < Controller
|
5
5
|
map '/'
|
6
6
|
|
7
7
|
layout(:text) do |name, wish|
|
8
|
-
|
8
|
+
if request.xhr? or name == 'atom' or name == 'sitemap'
|
9
|
+
false
|
10
|
+
else
|
11
|
+
true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# We provide an XML sitemap.
|
16
|
+
provide(:xml, :type => 'text/xml') do |action, value|
|
17
|
+
Ramaze::Log.info action
|
18
|
+
if action.method == 'sitemap'
|
19
|
+
value
|
20
|
+
else
|
21
|
+
nil
|
22
|
+
end
|
9
23
|
end
|
10
24
|
|
11
25
|
helper :cache,
|
@@ -14,9 +28,16 @@ module CortexReaver
|
|
14
28
|
:feeds,
|
15
29
|
:pages
|
16
30
|
|
17
|
-
|
18
|
-
|
19
|
-
|
31
|
+
cache_action(:method => :index, :ttl => 120) do
|
32
|
+
user.id.to_i.to_s + flash.inspect
|
33
|
+
end
|
34
|
+
cache_action(:method => :sitemap, :ttl => 300) do
|
35
|
+
request.path_info
|
36
|
+
end
|
37
|
+
|
38
|
+
def cache
|
39
|
+
respond Ramaze::Cache.action.stats
|
40
|
+
end
|
20
41
|
|
21
42
|
# the index action is called automatically when no other action is specified
|
22
43
|
def index(*ids)
|
@@ -25,10 +46,10 @@ module CortexReaver
|
|
25
46
|
@title = @page.title
|
26
47
|
|
27
48
|
if user.can_edit? Page.new
|
28
|
-
workflow "Edit this page", PageController.r(:edit, @page.id)
|
49
|
+
workflow "Edit this page", PageController.r(:edit, @page.id), :edit, :page
|
29
50
|
end
|
30
51
|
if user.can_delete? Page.new
|
31
|
-
workflow "Delete this page", PageController.r(:delete, @page.id)
|
52
|
+
workflow "Delete this page", PageController.r(:delete, @page.id), :delete, :page
|
32
53
|
end
|
33
54
|
|
34
55
|
PageController.render_view('show')
|
@@ -37,33 +58,22 @@ module CortexReaver
|
|
37
58
|
error_404
|
38
59
|
else
|
39
60
|
# Default welcome page
|
40
|
-
@photographs = Photograph.recent.viewable_by(user)
|
41
61
|
@journals = Journal.recent.viewable_by(user)
|
42
|
-
|
43
|
-
if @photographs.count > 0
|
44
|
-
# Show sidebar
|
45
|
-
@sidebar ||= []
|
46
|
-
@sidebar.unshift PhotographController.render_view('sidebar')
|
47
|
-
end
|
48
62
|
|
49
63
|
# Workflows
|
50
64
|
if user.can_create? Journal.new
|
51
|
-
workflow "New Journal", JournalController.r(:new)
|
52
|
-
end
|
53
|
-
if user.can_create? Page.new
|
54
|
-
workflow "New Page", PageController.r(:new)
|
65
|
+
workflow "New Journal", JournalController.r(:new), :new, :journal
|
55
66
|
end
|
56
67
|
if user.can_create? Photograph.new
|
57
|
-
workflow "New Photograph", PhotographController.r(:new)
|
68
|
+
workflow "New Photograph", PhotographController.r(:new), :new, :photograph
|
69
|
+
end
|
70
|
+
if user.can_create? Page.new
|
71
|
+
workflow "New Page", PageController.r(:new), :new, :page
|
58
72
|
end
|
59
|
-
# if user.can_create? Project.new
|
60
|
-
# workflow "New Project", ProjectController.r(:new)
|
61
|
-
# end
|
62
73
|
|
63
74
|
# Feeds
|
64
75
|
feed 'Photographs', PhotographController.r(:atom)
|
65
76
|
feed 'Journals', JournalController.r(:atom)
|
66
|
-
# feed 'Projects', ProjectController.r(:atom)
|
67
77
|
feed 'Comments', CommentController.r(:atom)
|
68
78
|
|
69
79
|
JournalController.render_view('list', :journals => @journals)
|
@@ -75,9 +85,90 @@ module CortexReaver
|
|
75
85
|
error_404
|
76
86
|
end
|
77
87
|
|
78
|
-
|
79
|
-
|
80
|
-
|
88
|
+
# XML sitemap.
|
89
|
+
def sitemap
|
90
|
+
error_404 unless request.path_info =~ /\.xml$/
|
91
|
+
|
92
|
+
doc = LibXML::XML::Document.new
|
93
|
+
doc.root = (root = LibXML::XML::Node.new('urlset'))
|
94
|
+
root['xmlns'] = "http://www.sitemaps.org/schemas/sitemap/0.9"
|
95
|
+
|
96
|
+
# Front page
|
97
|
+
root << (url = LibXML::XML::Node.new('url'))
|
98
|
+
url << (loc = LibXML::XML::Node.new('loc'))
|
99
|
+
loc << full_url('/')
|
100
|
+
url << (lastmod = LibXML::XML::Node.new('lastmod'))
|
101
|
+
lastmod << Time.parse(Journal.dataset.min(:updated_on).to_s).xmlschema
|
102
|
+
url << (changefreq = LibXML::XML::Node.new('changefreq'))
|
103
|
+
changefreq << 'hourly'
|
104
|
+
url << (priority = LibXML::XML::Node.new('priority'))
|
105
|
+
priority << '1.0'
|
106
|
+
|
107
|
+
# Indexes
|
108
|
+
[JournalController, PhotographController].each do |c|
|
109
|
+
root << (url = LibXML::XML::Node.new('url'))
|
110
|
+
url << (loc = LibXML::XML::Node.new('loc'))
|
111
|
+
url << (lastmod = LibXML::XML::Node.new('lastmod'))
|
112
|
+
url << (changefreq = LibXML::XML::Node.new('changefreq'))
|
113
|
+
url << (priority = LibXML::XML::Node.new('priority'))
|
114
|
+
|
115
|
+
loc << full_url(c.r)
|
116
|
+
lastmod << Time.parse(c::MODEL.dataset.min(:updated_on).to_s).xmlschema
|
117
|
+
changefreq << 'hourly'
|
118
|
+
priority << '0.9'
|
119
|
+
end
|
120
|
+
|
121
|
+
# Comments
|
122
|
+
root << (url = LibXML::XML::Node.new('url'))
|
123
|
+
url << (loc = LibXML::XML::Node.new('loc'))
|
124
|
+
url << (lastmod = LibXML::XML::Node.new('lastmod'))
|
125
|
+
url << (changefreq = LibXML::XML::Node.new('changefreq'))
|
126
|
+
url << (priority = LibXML::XML::Node.new('priority'))
|
127
|
+
|
128
|
+
loc << full_url('/comments')
|
129
|
+
lastmod << Time.parse(Comment.dataset.min(:updated_on).to_s).xmlschema
|
130
|
+
changefreq << 'always'
|
131
|
+
priority << '0.5'
|
132
|
+
|
133
|
+
# Individual pages
|
134
|
+
Page.all.each do |page|
|
135
|
+
root << (url = LibXML::XML::Node.new('url'))
|
136
|
+
url << (loc = LibXML::XML::Node.new('loc'))
|
137
|
+
url << (lastmod = LibXML::XML::Node.new('lastmod'))
|
138
|
+
url << (changefreq = LibXML::XML::Node.new('changefreq'))
|
139
|
+
url << (priority = LibXML::XML::Node.new('priority'))
|
140
|
+
|
141
|
+
loc << full_url(page.url)
|
142
|
+
lastmod << page.updated_on.xmlschema
|
143
|
+
changefreq << 'weekly'
|
144
|
+
priority << '0.9'
|
145
|
+
end
|
146
|
+
Journal.all.each do |journal|
|
147
|
+
root << (url = LibXML::XML::Node.new('url'))
|
148
|
+
url << (loc = LibXML::XML::Node.new('loc'))
|
149
|
+
url << (lastmod = LibXML::XML::Node.new('lastmod'))
|
150
|
+
url << (changefreq = LibXML::XML::Node.new('changefreq'))
|
151
|
+
url << (priority = LibXML::XML::Node.new('priority'))
|
152
|
+
|
153
|
+
loc << full_url(journal.url)
|
154
|
+
lastmod << journal.updated_on.xmlschema
|
155
|
+
changefreq << 'weekly'
|
156
|
+
priority << '0.8'
|
157
|
+
end
|
158
|
+
Photograph.all.each do |photograph|
|
159
|
+
root << (url = LibXML::XML::Node.new('url'))
|
160
|
+
url << (loc = LibXML::XML::Node.new('loc'))
|
161
|
+
url << (lastmod = LibXML::XML::Node.new('lastmod'))
|
162
|
+
url << (changefreq = LibXML::XML::Node.new('changefreq'))
|
163
|
+
url << (priority = LibXML::XML::Node.new('priority'))
|
164
|
+
|
165
|
+
loc << full_url(photograph.url)
|
166
|
+
lastmod << photograph.updated_on.xmlschema
|
167
|
+
changefreq << 'weekly'
|
168
|
+
priority << '0.8'
|
169
|
+
end
|
170
|
+
|
171
|
+
doc
|
81
172
|
end
|
82
173
|
|
83
174
|
private
|
@@ -24,6 +24,7 @@ module CortexReaver
|
|
24
24
|
end
|
25
25
|
|
26
26
|
on_second_save do |page, request|
|
27
|
+
Ramaze::Log.info request[:tags]
|
27
28
|
page.tags = request[:tags]
|
28
29
|
add_attachments(page, request[:attachments])
|
29
30
|
end
|
@@ -43,5 +44,11 @@ module CortexReaver
|
|
43
44
|
on_update do |page, request|
|
44
45
|
page.updater = session[:user]
|
45
46
|
end
|
47
|
+
|
48
|
+
def index
|
49
|
+
@models = @pages = Page.select(:id, :name, :title)
|
50
|
+
workflow 'New Page', rs(:new), :new, :page
|
51
|
+
render_view :list
|
52
|
+
end
|
46
53
|
end
|
47
54
|
end
|
@@ -7,12 +7,12 @@ module CortexReaver
|
|
7
7
|
map '/photographs'
|
8
8
|
|
9
9
|
layout do |name, wish|
|
10
|
-
if ['
|
11
|
-
:
|
10
|
+
if ['show'].include? name
|
11
|
+
:blank
|
12
12
|
elsif request.xhr? or name == 'atom'
|
13
13
|
nil
|
14
14
|
else
|
15
|
-
:
|
15
|
+
:text
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -32,6 +32,10 @@ module CortexReaver
|
|
32
32
|
user.id.to_i.to_s + flash.inspect
|
33
33
|
end
|
34
34
|
|
35
|
+
before :index, :show, :page, :list, :tagged do
|
36
|
+
@body_class = "photographs"
|
37
|
+
end
|
38
|
+
|
35
39
|
on_save do |photograph, request|
|
36
40
|
photograph.title = request[:title]
|
37
41
|
photograph.name = Photograph.canonicalize request[:name], :id => photograph.id
|
@@ -54,13 +58,11 @@ module CortexReaver
|
|
54
58
|
photograph.updater = session[:user]
|
55
59
|
end
|
56
60
|
|
57
|
-
for_feed do |photograph,
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
"a",
|
62
|
-
:type => 'html'
|
63
|
-
)
|
61
|
+
for_feed do |photograph, entry|
|
62
|
+
entry << (content = LibXML::XML::Node.new('content'))
|
63
|
+
entry << render_view(:atom_fragment, :photograph => photograph)
|
64
|
+
entry['type'] = 'html'
|
64
65
|
end
|
66
|
+
|
65
67
|
end
|
66
68
|
end
|
@@ -35,12 +35,17 @@ module CortexReaver
|
|
35
35
|
end
|
36
36
|
|
37
37
|
# Listing users outright is a little dodgy.
|
38
|
-
before
|
38
|
+
before(:index, :page) do
|
39
39
|
for_auth do |u|
|
40
40
|
u.admin?
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
def index
|
45
|
+
@models = @users = User.select(:name, :id, :login)
|
46
|
+
render_view :list
|
47
|
+
end
|
48
|
+
|
44
49
|
def login
|
45
50
|
@title = "Login"
|
46
51
|
|
@@ -66,7 +71,7 @@ module CortexReaver
|
|
66
71
|
|
67
72
|
def logout
|
68
73
|
if user = do_logout
|
69
|
-
flash[:notice] = "Goodbye, #{user.name}"
|
74
|
+
flash[:notice] = "Goodbye, #{user.name}."
|
70
75
|
end
|
71
76
|
redirect '/'
|
72
77
|
end
|
@@ -26,7 +26,7 @@ module Ramaze
|
|
26
26
|
def delete_attachment(id, name)
|
27
27
|
unless @model = model_class.get(id)
|
28
28
|
flash[:error] = "No such #{model_class.to_s.downcase} (#{h id}) exists."
|
29
|
-
redirect
|
29
|
+
redirect rs()
|
30
30
|
end
|
31
31
|
|
32
32
|
# You need to be able to edit the model before removing attachments!
|
@@ -57,7 +57,7 @@ module Ramaze
|
|
57
57
|
def attachment_form(model)
|
58
58
|
s = "<div id=\"files\" class=\"files\">\n <ul>\n "
|
59
59
|
model.attachments.each do |attachment|
|
60
|
-
s << "<li><a href=\"#{attachment.public_path}\">#{attachment.name}</a> (#{
|
60
|
+
s << "<li><a href=\"#{attachment.public_path}\">#{attachment.name}</a> (#{a('delete', :href => rs(:delete_attachment, model.name, attachment.name))})</li>\n"
|
61
61
|
end
|
62
62
|
s << "</ul>\n</div>\n\n"
|
63
63
|
|
@@ -96,7 +96,7 @@ module Ramaze
|
|
96
96
|
u.can_create? model_class.new
|
97
97
|
end
|
98
98
|
|
99
|
-
@title = "New #{
|
99
|
+
@title = "New #{model_class.to_s.demodulize.titleize}"
|
100
100
|
@form_action = :new
|
101
101
|
|
102
102
|
if request.post?
|
@@ -221,7 +221,7 @@ module Ramaze
|
|
221
221
|
u.can_edit? @model
|
222
222
|
end
|
223
223
|
|
224
|
-
@title = "Edit #{model_class.to_s.demodulize.downcase} #{
|
224
|
+
@title = "Edit #{model_class.to_s.demodulize.downcase} #{@model.to_s}"
|
225
225
|
@form_action = "edit/#{@model.id}"
|
226
226
|
|
227
227
|
set_singular_model_var @model
|
@@ -315,7 +315,7 @@ module Ramaze
|
|
315
315
|
set_plural_model_var @models
|
316
316
|
|
317
317
|
if user.can_create? model_class.new
|
318
|
-
workflow "New #{model_class.to_s.demodulize}", rs(:new)
|
318
|
+
workflow "New #{model_class.to_s.demodulize}", rs(:new), :new, model_class.to_s.demodulize.downcase
|
319
319
|
end
|
320
320
|
|
321
321
|
render_view(:list)
|
@@ -332,7 +332,7 @@ module Ramaze
|
|
332
332
|
# Redirect IDs to names
|
333
333
|
raw_redirect(@model.url, :status => 301) if id =~ /^\d+$/
|
334
334
|
|
335
|
-
@title =
|
335
|
+
@title = @model.to_s
|
336
336
|
set_singular_model_var @model
|
337
337
|
|
338
338
|
if @model.class.associations.include? :comments
|
@@ -351,13 +351,13 @@ module Ramaze
|
|
351
351
|
end
|
352
352
|
|
353
353
|
if user.can_create? model_class.new
|
354
|
-
workflow "New #{model_class.to_s.demodulize}", rs(:new)
|
354
|
+
workflow "New #{model_class.to_s.demodulize}", rs(:new), :new, model_class.to_s.demodulize.downcase
|
355
355
|
end
|
356
356
|
if user.can_edit? @model
|
357
|
-
workflow "Edit this #{model_class.to_s.demodulize}", rs(:edit, @model.id)
|
357
|
+
workflow "Edit this #{model_class.to_s.demodulize}", rs(:edit, @model.id), :edit, model_class.to_s.demodulize.downcase
|
358
358
|
end
|
359
359
|
if user.can_delete? @model
|
360
|
-
workflow "Delete this #{model_class.to_s.demodulize}", rs(:delete, @model.id)
|
360
|
+
workflow "Delete this #{model_class.to_s.demodulize}", rs(:delete, @model.id), :delete, model_class.to_s.demodulize.downcase
|
361
361
|
end
|
362
362
|
elsif id
|
363
363
|
# Didn't find that model
|
@@ -6,7 +6,7 @@ module Ramaze
|
|
6
6
|
#
|
7
7
|
# Requires crud. Will attempt to cache feeds if the cache helper is available.
|
8
8
|
module Feeds
|
9
|
-
require '
|
9
|
+
require 'libxml'
|
10
10
|
|
11
11
|
Helper::LOOKUP << self
|
12
12
|
|
@@ -36,9 +36,6 @@ module Ramaze
|
|
36
36
|
def atom_builder(params = {:model_class => self.class.const_get('MODEL')})
|
37
37
|
response['Content-Type'] = 'application/atom+xml'
|
38
38
|
|
39
|
-
x = Builder::XmlMarkup.new(:indent => 2)
|
40
|
-
x.instruct!
|
41
|
-
|
42
39
|
# Get model class to work with
|
43
40
|
model_class = params[:model_class]
|
44
41
|
|
@@ -52,42 +49,63 @@ module Ramaze
|
|
52
49
|
updated = Time.now.xmlschema
|
53
50
|
end
|
54
51
|
|
55
|
-
#
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
52
|
+
# Doc
|
53
|
+
doc = LibXML::XML::Document.new
|
54
|
+
doc.root = (root = LibXML::XML::Node.new('feed'))
|
55
|
+
root['xmlns'] = 'http://www.w3.org/2005/Atom'
|
56
|
+
|
57
|
+
# Global opts
|
58
|
+
root << (id = LibXML::XML::Node.new('id'))
|
59
|
+
id << CortexReaver.config.site.url.to_s
|
60
|
+
|
61
|
+
root << (title = LibXML::XML::Node.new('title'))
|
62
|
+
title << "#{CortexReaver.config.site.name} - #{model_class.to_s.demodulize.titleize}"
|
63
|
+
|
64
|
+
root << (updated_node = LibXML::XML::Node.new('updated'))
|
65
|
+
updated_node << updated.to_s
|
66
|
+
|
67
|
+
root << (link = LibXML::XML::Node.new('link'))
|
68
|
+
link['href'] = full_url('/')
|
69
|
+
|
70
|
+
root << (link = LibXML::XML::Node.new('link'))
|
71
|
+
link['href'] = full_url(model_class.atom_url)
|
72
|
+
link['rel'] = 'self'
|
73
|
+
|
74
|
+
recent.all do |model|
|
75
|
+
root << (entry = LibXML::XML::Node.new('entry'))
|
76
|
+
|
77
|
+
entry << (id = LibXML::XML::Node.new('id'))
|
78
|
+
id << full_url(model.url)
|
79
|
+
|
80
|
+
entry << (title = LibXML::XML::Node.new('title'))
|
81
|
+
title << model.title.to_s
|
82
|
+
|
83
|
+
entry << (published = LibXML::XML::Node.new('published'))
|
84
|
+
published << model.created_on.xmlschema
|
85
|
+
|
86
|
+
entry << (updated = LibXML::XML::Node.new('updated'))
|
87
|
+
updated << model.updated_on.xmlschema
|
88
|
+
|
89
|
+
entry << (link = LibXML::XML::Node.new('link'))
|
90
|
+
link['href'] = full_url(model.url)
|
91
|
+
link['rel'] = 'alternate'
|
92
|
+
|
93
|
+
entry << (author = LibXML::XML::Node.new('author'))
|
94
|
+
author << (name = LibXML::XML::Node.new('name'))
|
95
|
+
name << model.creator.name.to_s
|
96
|
+
|
97
|
+
if model.creator.http
|
98
|
+
author << (uri = LibXML::XML::Node.new('uri'))
|
99
|
+
uri << model.creator.http.to_s
|
100
|
+
end
|
101
|
+
|
102
|
+
# Any additional controller-specific info
|
103
|
+
if self.class.for_feed_block
|
104
|
+
self.class.for_feed_block.call(model, entry)
|
89
105
|
end
|
90
106
|
end
|
107
|
+
|
108
|
+
doc
|
91
109
|
end
|
92
110
|
|
93
111
|
def feeds
|