cortex-reaver 0.1.0 → 0.2.0
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.
- 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
|