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
@@ -0,0 +1,23 @@
|
|
1
|
+
# A little no-op cache
|
2
|
+
module CortexReaver
|
3
|
+
class Cache
|
4
|
+
class Noop
|
5
|
+
include Innate::Cache::API
|
6
|
+
def cache_clear; end
|
7
|
+
|
8
|
+
def cached_delete(key, *keys)
|
9
|
+
nil
|
10
|
+
end
|
11
|
+
|
12
|
+
def cache_fetch(key, default = nil)
|
13
|
+
default
|
14
|
+
end
|
15
|
+
|
16
|
+
def cache_setup(host, user, app, cache); end
|
17
|
+
|
18
|
+
def cache_store(key, value, options = {})
|
19
|
+
value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/cortex_reaver/config.rb
CHANGED
@@ -1,92 +1,196 @@
|
|
1
1
|
module CortexReaver
|
2
2
|
# Contains site-specific configuration information for a CortexReaver site.
|
3
|
-
class Config <
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# :root - The directory containing public/, layout/, and view/.
|
8
|
-
# Defaults to HOME_DIR.
|
9
|
-
# :log_root - The directory that Cortex Reaver should log to. Defaults to
|
10
|
-
# HOME_DIR/log. If nil, file logging disabled.
|
11
|
-
# :plugin_root - The directory that Cortex Reaver plugins live in. Defaults
|
12
|
-
# to HOME_DIR/plugins.
|
13
|
-
# :mode - Cortex Reaver mode: either :development or :production
|
14
|
-
# :daemon - Whether to daemonize or not. Defaults to :true if :mode
|
15
|
-
# is :production, otherwise nil.
|
16
|
-
# :adapter - The Ramaze adapter name (default 'thin')
|
17
|
-
# :cache - The Ramaze cache to use (default: :memory)
|
18
|
-
# :host - Host to bind to
|
19
|
-
# :port - Port to bind to (default 7000)
|
20
|
-
# :pidfile - Process ID file for this server. Defaults to
|
21
|
-
# HOME_DIR/cortex_reaver_<host>_<port>.pid
|
22
|
-
# :compile_views - Whether to cache compiled view templates. Defaults to
|
23
|
-
# true in production mode.
|
24
|
-
# :plugins - Which plugins to enable. Defaults to [].
|
25
|
-
#
|
26
|
-
# Site configuration options
|
27
|
-
# :site = {
|
28
|
-
# :name - The name of the site
|
29
|
-
# :author - The site author's name
|
30
|
-
# :keywords - Keywords describing the site
|
31
|
-
# :description - A short description of the site.
|
32
|
-
# }
|
33
|
-
def initialize(file)
|
3
|
+
class Config < Construct
|
4
|
+
def initialize(*args)
|
5
|
+
super *args
|
6
|
+
|
34
7
|
# Defaults
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
:
|
52
|
-
:
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
8
|
+
define :root,
|
9
|
+
:desc => 'The local directory where CortexReaver runs.',
|
10
|
+
:default => CortexReaver::HOME_DIR
|
11
|
+
define :log_root,
|
12
|
+
:desc => 'Directory where logs are stored.',
|
13
|
+
:default => File.join(root, 'log')
|
14
|
+
define :layout_root,
|
15
|
+
:desc => 'Local directory where layouts are found.',
|
16
|
+
:default => File.join(root, 'layout')
|
17
|
+
define :plugin_root,
|
18
|
+
:desc => 'Local directory where plugins are found.',
|
19
|
+
:default => File.join(root, 'plugins')
|
20
|
+
define :public_root,
|
21
|
+
:desc => 'Local directory where public files are found.',
|
22
|
+
:default => File.join(root, 'public')
|
23
|
+
define :view_root,
|
24
|
+
:desc => 'Local directory where views are found.',
|
25
|
+
:default => File.join(root, 'view')
|
26
|
+
|
27
|
+
|
28
|
+
define :database, :default => Construct.new
|
29
|
+
database.define :adapter,
|
30
|
+
:desc => 'Database adapter',
|
31
|
+
:default => 'sqlite'
|
32
|
+
database.define :username,
|
33
|
+
:desc => 'Username',
|
34
|
+
:default => nil
|
35
|
+
database.define :password,
|
36
|
+
:desc => 'Database password',
|
37
|
+
:default => nil
|
38
|
+
database.define :host,
|
39
|
+
:desc => 'Host to connect to for the database.',
|
40
|
+
:default => nil
|
41
|
+
database.define :port,
|
42
|
+
:desc => 'Database port',
|
43
|
+
:default => nil
|
44
|
+
database.define :database,
|
45
|
+
:desc => 'The database on the server to connect to.',
|
46
|
+
:default => '/' + File.expand_path(File.join(root, 'cortex_reaver.db'))
|
47
|
+
database.define :string,
|
48
|
+
:desc => 'A Sequel connection string. If present, overrides the other DB fields.',
|
49
|
+
:default => nil
|
50
|
+
|
51
|
+
def database.str
|
52
|
+
if string
|
53
|
+
string
|
54
|
+
else
|
55
|
+
str = ''
|
56
|
+
str << adapter + '://' if adapter
|
57
|
+
str << username if username
|
58
|
+
str << ':' + password if username and password
|
59
|
+
str << '@' if username or password
|
60
|
+
str << host if host
|
61
|
+
str << ':' + port if host and port
|
62
|
+
str << '/'
|
63
|
+
str << database if database
|
62
64
|
end
|
63
65
|
end
|
64
66
|
|
65
|
-
|
66
|
-
|
67
|
+
define :mode,
|
68
|
+
:desc => 'Development or production mode.',
|
69
|
+
:default => :production
|
70
|
+
define :adapter,
|
71
|
+
:desc => 'The web server adapter used for Cortex Reaver.',
|
72
|
+
:default => 'thin'
|
73
|
+
define :cache,
|
74
|
+
:desc => 'The caching system used. One of :memory or :memcache',
|
75
|
+
:default => :memory
|
76
|
+
define :host,
|
77
|
+
:desc => 'Host address to bind to.',
|
78
|
+
:default => nil
|
79
|
+
define :port,
|
80
|
+
:desc => 'Port to bind to.',
|
81
|
+
:default => 7000
|
82
|
+
|
83
|
+
define :memcache,
|
84
|
+
:desc => "Memcache options",
|
85
|
+
:default => Construct.new
|
86
|
+
|
87
|
+
memcache.define :servers,
|
88
|
+
:desc => "Servers to use. An array of strings like 'host:port:weight'",
|
89
|
+
:default => ['localhost']
|
90
|
+
|
91
|
+
define :plugins,
|
92
|
+
:desc => 'Plugins configuration space.',
|
93
|
+
:default => Construct.new
|
94
|
+
plugins.define :enabled,
|
95
|
+
:desc => 'Plugin names to enable.',
|
96
|
+
:default => []
|
97
|
+
|
98
|
+
define :site,
|
99
|
+
:desc => 'Site configuration options',
|
100
|
+
:default => Construct.new
|
101
|
+
site.define :url,
|
102
|
+
:desc => 'The URL base for the web site. No trailing /.',
|
103
|
+
:default => 'http://localhost'
|
104
|
+
site.define :name,
|
105
|
+
:desc => 'The name of this web site. Used in titles, metadata, etc.',
|
106
|
+
:default => 'Cortex Reaver'
|
107
|
+
site.define :description,
|
108
|
+
:desc => 'A brief description of this site.',
|
109
|
+
:default => "Stalks the dark corridors of this station, converting humans to Shodan's perfection."
|
110
|
+
site.define :keywords,
|
111
|
+
:desc => 'Site keywords',
|
112
|
+
:default => 'Cortex Reaver, blog'
|
113
|
+
site.define :author,
|
114
|
+
:desc => 'The primary author of this site, used in copyright & metadata.',
|
115
|
+
:default => 'Shodan'
|
67
116
|
|
68
|
-
|
69
|
-
|
117
|
+
define :pidfile,
|
118
|
+
:desc => 'Filename which stores the process ID of Cortex Reaver.',
|
119
|
+
:default => File.join(root, "cortex_reaver_#{host ? host.to_s + '_' : ''}#{port}.pid")
|
120
|
+
define :daemon,
|
121
|
+
:desc => "Whether to daemonize. Enabled by default in production mode."
|
122
|
+
define :compile_views,
|
123
|
+
:desc => 'Whether to compile views. Enabled by default in production.'
|
70
124
|
|
71
|
-
|
72
|
-
|
125
|
+
define :view,
|
126
|
+
:desc => "Configuration options for content display.",
|
127
|
+
:default => Construct.new
|
128
|
+
view.define :sections,
|
129
|
+
:desc => "A list of top-level sections for navigation. First is the human-readable name, and second is the URI for the link.",
|
130
|
+
:default => [
|
131
|
+
['Journals', '/journals'],
|
132
|
+
['Photographs', '/photographs'],
|
133
|
+
['Tags', '/tags'],
|
134
|
+
['Comments', '/comments'],
|
135
|
+
['About', '/about']
|
136
|
+
]
|
137
|
+
view.define :sidebar,
|
138
|
+
:desc => "An array of sidebars: [path, view]. Path is matched against the current request path. * globs to any non-slash characters, ** globs to all characters. The view is a string referencing the view in view/sidebar/ to render.
|
139
|
+
|
140
|
+
For example, if you wanted to render view/sidebar/tweet.rhtml using the twitter plugin, but only on the main page, you could do:
|
141
|
+
|
142
|
+
['/', 'twitter']
|
143
|
+
|
144
|
+
Or to render a related entries box on all photograph pages...
|
145
|
+
|
146
|
+
['/photographs/show/*', 'related']
|
147
|
+
|
148
|
+
You can also just provide a regex for the path, in which case it is matched directly against path_info. For example, here's how I show some custom tags on /photographs and other photo index pages:
|
149
|
+
|
150
|
+
[/^\/photographs(\/(page|tagged))?/, 'explore_photos']
|
151
|
+
[/^\/journals(\/(page|tagged))?/, 'explore_journals']
|
152
|
+
",
|
153
|
+
:default => [
|
154
|
+
['**', 'sections'],
|
155
|
+
['/', 'photographs']
|
156
|
+
]
|
157
|
+
|
158
|
+
define :css,
|
159
|
+
:desc => "An array of CSS files to load first, in order.",
|
160
|
+
:default => []
|
161
|
+
define :js,
|
162
|
+
:desc => "An array of Javascript files to load first, in order.",
|
163
|
+
:default => [
|
164
|
+
'jquery.js',
|
165
|
+
'jquery.color.js',
|
166
|
+
'jquery.dimensions.js',
|
167
|
+
'jquery.corners.min.js',
|
168
|
+
'jquery.hotkeys-0.7.9.js',
|
169
|
+
'cookie.js'
|
170
|
+
]
|
73
171
|
end
|
74
|
-
|
75
|
-
def
|
76
|
-
if
|
77
|
-
|
172
|
+
|
173
|
+
def compile_views
|
174
|
+
if include? :compile_views
|
175
|
+
self[:compile_views]
|
176
|
+
else
|
177
|
+
mode == :production
|
78
178
|
end
|
79
179
|
end
|
80
180
|
|
81
|
-
def
|
82
|
-
if
|
83
|
-
|
181
|
+
def daemon
|
182
|
+
if include? :daemon
|
183
|
+
self[:daemon]
|
184
|
+
else
|
185
|
+
mode == :production
|
84
186
|
end
|
85
187
|
end
|
86
188
|
|
87
|
-
|
88
|
-
|
89
|
-
|
189
|
+
# Saves self to disk
|
190
|
+
def save
|
191
|
+
Ramaze::Log.info "Saving config #{to_yaml}"
|
192
|
+
File.open(CortexReaver.config_file, 'w') do |file|
|
193
|
+
file.write to_yaml
|
90
194
|
end
|
91
195
|
end
|
92
196
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module CortexReaver
|
2
|
-
class AdminController < Controller
|
3
|
-
|
2
|
+
class AdminController < Controller
|
4
3
|
map '/admin'
|
5
4
|
|
6
5
|
layout(:text) do
|
@@ -13,17 +12,44 @@ module CortexReaver
|
|
13
12
|
require_roles :admin
|
14
13
|
end
|
15
14
|
|
15
|
+
def self.jobs
|
16
|
+
@jobs ||= {}
|
17
|
+
end
|
18
|
+
|
16
19
|
def index
|
17
20
|
end
|
18
21
|
|
22
|
+
def configuration
|
23
|
+
if request.post?
|
24
|
+
begin
|
25
|
+
# Update config
|
26
|
+
# View sections
|
27
|
+
CortexReaver.config.view.sections = []
|
28
|
+
request['view.sections'].split("\n").each do |line|
|
29
|
+
parts = line.strip.split(' ')
|
30
|
+
if parts.size > 1
|
31
|
+
CortexReaver.config.view.sections << [parts[0..-2].join(' '), parts[-1]]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Save
|
36
|
+
CortexReaver.config.save
|
37
|
+
flash[:notice] = "Configuration saved."
|
38
|
+
rescue => e
|
39
|
+
Ramaze::Log.error e.inspect + e.backtrace.join("\n")
|
40
|
+
flash[:error] = "Unable to update configuration: #{h e}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
19
45
|
# Recalculate comment counts
|
20
46
|
def update_comments
|
21
|
-
[Journal, Page,
|
47
|
+
[Journal, Page, Photograph].each do |klass|
|
22
48
|
klass.refresh_comment_counts
|
23
49
|
end
|
24
50
|
|
25
51
|
flash[:notice] = "Comment counts updated."
|
26
|
-
redirect
|
52
|
+
redirect rs()
|
27
53
|
end
|
28
54
|
|
29
55
|
# Recalculate tag counts and vacuum unused tags
|
@@ -34,5 +60,39 @@ module CortexReaver
|
|
34
60
|
@deleted << tag.destroy
|
35
61
|
end
|
36
62
|
end
|
63
|
+
|
64
|
+
def regenerate_caches
|
65
|
+
[Journal, Page, Comment].each do |klass|
|
66
|
+
klass.refresh_render_caches
|
67
|
+
end
|
68
|
+
redirect rs()
|
69
|
+
end
|
70
|
+
|
71
|
+
def regenerate_photo_sizes_status
|
72
|
+
if job = self.class.jobs[:regenerate_photo_sizes]
|
73
|
+
respond "{'i':#{job[:i]},'total':#{job[:total]}}"
|
74
|
+
else
|
75
|
+
respond '{}'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Regenerates thumbnails on photographs
|
80
|
+
def regenerate_photo_sizes
|
81
|
+
unless self.class.jobs[:regenerate_photo_sizes]
|
82
|
+
self.class.jobs[:regenerate_photo_sizes] = Thread.new do
|
83
|
+
Thread.current.priority = -2
|
84
|
+
Thread.current[:total] = Photograph.count
|
85
|
+
while photo = (photo ? photo.next : Photograph.first)
|
86
|
+
Thread.current[:photo] = photo
|
87
|
+
Thread.current[:i] = photo.position
|
88
|
+
photo.regenerate_sizes
|
89
|
+
end
|
90
|
+
|
91
|
+
# Done
|
92
|
+
self.class.jobs[:regenerate_photo_sizes] = nil
|
93
|
+
Thread.exit
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
37
97
|
end
|
38
98
|
end
|
@@ -29,7 +29,6 @@ module CortexReaver
|
|
29
29
|
comment.comment_id = request[:comment_id]
|
30
30
|
comment.journal_id = request[:journal_id]
|
31
31
|
comment.photograph_id = request[:photograph_id]
|
32
|
-
comment.project_id = request[:project_id]
|
33
32
|
end
|
34
33
|
|
35
34
|
on_create do |comment, request|
|
@@ -49,8 +48,10 @@ module CortexReaver
|
|
49
48
|
journal.updater = session[:user]
|
50
49
|
end
|
51
50
|
|
52
|
-
for_feed do |comment,
|
53
|
-
|
51
|
+
for_feed do |comment, entry|
|
52
|
+
entry << (content = LibXML::XML::Node.new('content'))
|
53
|
+
entry['type'] = 'html'
|
54
|
+
entry << comment.body_cache.to_s
|
54
55
|
end
|
55
56
|
|
56
57
|
# We only really care about tracking recent comments.
|
@@ -84,7 +85,6 @@ module CortexReaver
|
|
84
85
|
@comment.comment_id = request[:comment_id]
|
85
86
|
@comment.journal_id = request[:journal_id]
|
86
87
|
@comment.photograph_id = request[:photograph_id]
|
87
|
-
@comment.project_id = request[:project_id]
|
88
88
|
|
89
89
|
if session[:user]
|
90
90
|
# A user is logged in. Use their account.
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module CortexReaver
|
2
2
|
class Controller < Ramaze::Controller
|
3
|
-
|
3
|
+
# TODO: This breaks now. Why?
|
4
|
+
# trait :app => :cortex_reaver
|
4
5
|
engine :Erubis
|
5
6
|
layout :text
|
6
|
-
helper :form, :auth, :navigation, :
|
7
|
+
helper :form, :auth, :navigation, :workflow, :error, :sidebar, :aspect
|
7
8
|
end
|
8
9
|
end
|
9
10
|
|
@@ -14,7 +15,6 @@ module CortexReaver
|
|
14
15
|
require File.join(LIB_DIR, 'controller', 'page')
|
15
16
|
require File.join(LIB_DIR, 'controller', 'journal')
|
16
17
|
require File.join(LIB_DIR, 'controller', 'photograph')
|
17
|
-
require File.join(LIB_DIR, 'controller', 'project')
|
18
18
|
require File.join(LIB_DIR, 'controller', 'comment')
|
19
19
|
require File.join(LIB_DIR, 'controller', 'tag')
|
20
20
|
require File.join(LIB_DIR, 'controller', 'documentation')
|
@@ -45,8 +45,10 @@ module CortexReaver
|
|
45
45
|
journal.updater = session[:user]
|
46
46
|
end
|
47
47
|
|
48
|
-
for_feed do |journal,
|
49
|
-
|
48
|
+
for_feed do |journal, entry|
|
49
|
+
entry << (content = LibXML::XML::Node.new('content'))
|
50
|
+
content << journal.body_cache.to_s
|
51
|
+
content['type'] = 'html'
|
50
52
|
end
|
51
53
|
end
|
52
54
|
end
|