qcms 1.3.3 → 1.3.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/VERSION +1 -1
- data/app/controllers/admin/admin_controller.rb +0 -3
- data/app/controllers/admin/meta_definitions_controller.rb +1 -0
- data/app/controllers/system/meta_definitions_controller.rb +29 -0
- data/app/controllers/system/system_controller.rb +8 -0
- data/app/helpers/system/documents_helper.rb +2 -0
- data/app/models/document.rb +19 -3
- data/app/models/meta_definition.rb +3 -3
- data/app/views/layouts/admin.html.erb +1 -1
- data/app/views/layouts/application.html.erb +1 -1
- data/app/views/layouts/system.html.erb +41 -0
- data/app/views/system/meta_definitions/_form.html.erb +22 -0
- data/app/views/system/meta_definitions/_meta_definition.html.erb +22 -0
- data/app/views/system/meta_definitions/edit.html.erb +5 -0
- data/app/views/system/meta_definitions/index.html.erb +47 -0
- data/app/views/system/meta_definitions/new.html.erb +5 -0
- data/app/views/{admin/admin/system.html.erb → system/system/dashboard.html.erb} +0 -0
- data/db/migrate/20090824150210_create_documents.rb +1 -0
- metadata +27 -9
- data/lib/tasks/cms.rake +0 -237
- data/qcms.gemspec +0 -91
- data/tasks/qcms_tasks.rake +0 -223
data/.gitignore
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.3.
|
1
|
+
1.3.5
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class System::MetaDefinitionsController < System::SystemController
|
2
|
+
inherit_resources
|
3
|
+
respond_to :html
|
4
|
+
|
5
|
+
def index
|
6
|
+
@meta_definitions = MetaDefinition.roots
|
7
|
+
@meta_definition = MetaDefinition.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def update
|
11
|
+
update! { system_meta_definitions_path }
|
12
|
+
end
|
13
|
+
|
14
|
+
def create
|
15
|
+
create! { system_meta_definitions_path }
|
16
|
+
end
|
17
|
+
|
18
|
+
def up
|
19
|
+
@meta_definition = MetaDefinition.find(params[:id])
|
20
|
+
@meta_definition.move_higher
|
21
|
+
redirect_to system_meta_definitions_path
|
22
|
+
end
|
23
|
+
|
24
|
+
def down
|
25
|
+
@meta_definition = MetaDefinition.find(params[:id])
|
26
|
+
@meta_definition.move_lower
|
27
|
+
redirect_to system_meta_definitions_path
|
28
|
+
end
|
29
|
+
end
|
data/app/models/document.rb
CHANGED
@@ -69,6 +69,13 @@ class Document < ActiveRecord::Base
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
+
# Allow all documents to be processed in tree structure
|
73
|
+
def self.process(&block)
|
74
|
+
Document.all.group_by(&:meta_definition).each do | meta_definition, documents |
|
75
|
+
documents.each { |document| yield(document, meta_definition)}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
72
79
|
# autherisation
|
73
80
|
def allowed?(user, action)
|
74
81
|
meta_definition.allowed?(user, action)
|
@@ -182,6 +189,15 @@ class Document < ActiveRecord::Base
|
|
182
189
|
map_fields
|
183
190
|
end
|
184
191
|
|
192
|
+
SortByOptions = {
|
193
|
+
'Date DESC' => 'published_at DESC',
|
194
|
+
'Date ASC' => 'published_at ASC',
|
195
|
+
'Title' => 'title',
|
196
|
+
'Manually' => 'position ASC'
|
197
|
+
}
|
198
|
+
|
199
|
+
PerPageOptions = [1, 5, 10, 20, 50, 100]
|
200
|
+
|
185
201
|
private
|
186
202
|
|
187
203
|
# make sure the last element of the path is the same as the permalink
|
@@ -235,12 +251,12 @@ class Document < ActiveRecord::Base
|
|
235
251
|
end
|
236
252
|
|
237
253
|
def generate_summary
|
238
|
-
self.summary = Sanitize.clean(self.body).to(255) if self.
|
254
|
+
self.summary = Sanitize.clean(self.body).to(255) if self.summary.blank?
|
239
255
|
end
|
240
256
|
|
241
257
|
def set_meta_data
|
242
|
-
self.meta_title = self.title.to(
|
243
|
-
self.meta_description = self.summary.to(
|
258
|
+
self.meta_title = self.title.to(255) if self.meta_title.blank?
|
259
|
+
self.meta_description = self.summary.to(255) if !self.summary.blank? && self.meta_description.blank?
|
244
260
|
end
|
245
261
|
|
246
262
|
# before_save
|
@@ -4,11 +4,11 @@ class MetaDefinition < ActiveRecord::Base
|
|
4
4
|
validates_presence_of :label_path, :label
|
5
5
|
validates_uniqueness_of :label_path
|
6
6
|
|
7
|
-
acts_as_list
|
7
|
+
acts_as_list :scope => :parent
|
8
8
|
acts_as_tree
|
9
9
|
path_finder :uid => 'label', :column => 'label_path'
|
10
10
|
|
11
|
-
default_scope :order => 'position
|
11
|
+
default_scope :order => 'position ASC'
|
12
12
|
|
13
13
|
named_scope :by_label, lambda { |label| { :conditions => ['label = ?', label] } }
|
14
14
|
|
@@ -52,6 +52,6 @@ class MetaDefinition < ActiveRecord::Base
|
|
52
52
|
|
53
53
|
# Prevent empty strings being saved
|
54
54
|
def nullify_empty_columns
|
55
|
-
%w(sort_by per_page).each { |column| self.send(column+'=', nil) if self.send(column) == '' }
|
55
|
+
%w(sort_by per_page default_state).each { |column| self.send(column+'=', nil) if self.send(column) == '' }
|
56
56
|
end
|
57
57
|
end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<title><%= @page_title || 'untitled' %></title>
|
6
6
|
<meta http-equiv="content-type" content="text/xhtml; charset=utf-8" />
|
7
7
|
<link rel="stylesheet" href="/stylesheets/admin/styles.css" type="text/css" media="screen" />
|
8
|
-
<%= javascript_include_tag 'jquery
|
8
|
+
<%= javascript_include_tag 'jquery.min.js' %>
|
9
9
|
<%= javascript_include_tag 'application' %>
|
10
10
|
<%= meta_tags -%>
|
11
11
|
<%= yield :head %>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<title><%= page_title %></title>
|
6
6
|
<meta http-equiv="content-type" content="text/xhtml; charset=utf-8" />
|
7
7
|
<link rel="stylesheet" href="/stylesheets/styles.css" type="text/css" media="screen" />
|
8
|
-
<%= javascript_include_tag 'jquery
|
8
|
+
<%= javascript_include_tag 'jquery.min.js' %>
|
9
9
|
<%= javascript_include_tag 'application' %>
|
10
10
|
<%= meta_tags -%>
|
11
11
|
<%= yield :head %>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
4
|
+
<head>
|
5
|
+
<title><%= @page_title || 'untitled' %></title>
|
6
|
+
<meta http-equiv="content-type" content="text/xhtml; charset=utf-8" />
|
7
|
+
<link rel="stylesheet" href="/stylesheets/system/styles.css" type="text/css" media="screen" />
|
8
|
+
<%= javascript_include_tag 'jquery.min.js' %>
|
9
|
+
<%= javascript_include_tag 'application' %>
|
10
|
+
<%= meta_tags -%>
|
11
|
+
<%= yield :head %>
|
12
|
+
</head>
|
13
|
+
<body>
|
14
|
+
|
15
|
+
<% if flash[:notice] %>
|
16
|
+
<div id="flash-notice"><%= flash[:notice] %> <a href="#">Close</a></div>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<div id="header">QWERTY+ <strong>System</strong> Control Panel</div>
|
20
|
+
|
21
|
+
<ul id="top_menu">
|
22
|
+
<li><a href="<%= system_dashboard_path %>">Dashboard</a></li>
|
23
|
+
<li><a href="<%= system_meta_definitions_path %>">Sitemap</a></li>
|
24
|
+
<li><a href="<%= system_users_path %>">Users</a></li>
|
25
|
+
<li><a href="<%= admin_dashboard_path %>">Admin</a></li>
|
26
|
+
<li><a href="<%= root_path %>">Site Homepage</a></li>
|
27
|
+
</ul>
|
28
|
+
|
29
|
+
<div id="container">
|
30
|
+
|
31
|
+
<div id="content">
|
32
|
+
<%= yield %>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div id="sidebar">
|
36
|
+
<%= yield :sidebar %>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
</div> <!-- container -->
|
40
|
+
</body>
|
41
|
+
</html>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%= form.error_messages %>
|
2
|
+
<% unless @meta_definition.new_record? %>
|
3
|
+
<p>Label path: <br/><%= form.text_field :label_path %></p>
|
4
|
+
<% end %>
|
5
|
+
<p>Label: <br/><%= form.text_field :label %></p>
|
6
|
+
<p>Parent: <br/><%= form.select :parent_id, ['', ''] + MetaDefinition.all.collect { |md| [md.label_path, md.id] } %></p>
|
7
|
+
|
8
|
+
<p><label>Sort by</label><br> <%= form.select :sort_by, Document::SortByOptions.to_a, :include_blank => true %></p>
|
9
|
+
<p><label>Per page</label><br> <%= form.select :per_page, Document::PerPageOptions.to_a, :include_blank => true %></p>
|
10
|
+
|
11
|
+
<p><%= form.check_box :record_hits %> Record hits</p>
|
12
|
+
<p><%= form.check_box :notify_admins %> Notify admins</p>
|
13
|
+
<p><%= form.check_box :randomise_permalink %> Randomise permalink</p>
|
14
|
+
<p><%= form.check_box :body_strip_html %> Strip HTML</p>
|
15
|
+
<p>Body Length: <br/><%= form.text_field :body_length %></p>
|
16
|
+
|
17
|
+
<fieldset>
|
18
|
+
<legend>Defaults</legend>
|
19
|
+
<p>State: <br/><%= form.text_field :default_state %></p>
|
20
|
+
<p>Type: <br/><%= form.text_field :default_type, :value => 'Document' %></p>
|
21
|
+
</fieldset>
|
22
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<div class='meta'>
|
2
|
+
<% unless md.children.empty? %>
|
3
|
+
<%= link_to md.label.capitalize, "##{dom_id(md)}", :class => 'toggle_details' %>
|
4
|
+
<% else %>
|
5
|
+
<%= md.label.capitalize %>
|
6
|
+
<% end %>
|
7
|
+
(<%= md.documents.count %>)
|
8
|
+
|
9
|
+
<%= link_to 'Add', md.id.to_s, :class => 'new' %>
|
10
|
+
<%= link_to 'Edit', edit_system_meta_definition_path(md) %>
|
11
|
+
<%= link_to 'Up', up_system_meta_definition_path(md) %>
|
12
|
+
<%= link_to 'Down', down_system_meta_definition_path(md) %>
|
13
|
+
<%= link_to 'Delete', system_meta_definition_path(md), :method => :delete, :confirm => "Delete this and #{md.documents.count} documents?" %>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<div id='<%= dom_id(md) %>' style='display:none;margin-left:20px;'>
|
17
|
+
<% unless md.children.empty? %>
|
18
|
+
<% md.children.each do |mdc| %>
|
19
|
+
<%= render :partial => 'meta_definition', :locals => {:md => mdc} %>
|
20
|
+
<% end %>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<h2>Meta Definitions</h2>
|
2
|
+
|
3
|
+
<% @meta_definitions.each do |md| %>
|
4
|
+
<%= render :partial => 'meta_definition', :locals => { :md => md } %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<p><%= link_to 'New', '#', :id => 'add_meta_definition', :class => 'button' %></p>
|
8
|
+
|
9
|
+
<div id='new_meta_definition' style='display:none;'>
|
10
|
+
<h3>New</h3>
|
11
|
+
<% form_for [:system, @meta_definition] do |f| %>
|
12
|
+
<%= render :partial => 'form', :object => f %>
|
13
|
+
<%= f.submit 'Save' %>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<style>
|
18
|
+
.meta {
|
19
|
+
margin: 4px;
|
20
|
+
margin-left: 20px;
|
21
|
+
padding: 4px;
|
22
|
+
background-color: #D3D6DE;
|
23
|
+
border-top: 2px white solid;
|
24
|
+
}
|
25
|
+
</style>
|
26
|
+
|
27
|
+
<script>
|
28
|
+
$(function() {
|
29
|
+
$('a.toggle_details').click(function() {
|
30
|
+
$($(this).attr('href')).toggle();
|
31
|
+
return false;
|
32
|
+
});
|
33
|
+
|
34
|
+
$('a#add_meta_definition').click(function() {
|
35
|
+
$('#new_meta_definition').show();
|
36
|
+
return false;
|
37
|
+
});
|
38
|
+
|
39
|
+
$('a.new').click(function() {
|
40
|
+
$('#new_meta_definition').show();
|
41
|
+
$('#meta_definition_parent_id').attr('value', $(this).attr('href'));
|
42
|
+
return false;
|
43
|
+
});
|
44
|
+
|
45
|
+
})
|
46
|
+
|
47
|
+
</script>
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qcms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 17
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 3
|
9
|
+
- 5
|
10
|
+
version: 1.3.5
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Kris Leech
|
@@ -9,7 +15,7 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-10-07 00:00:00 +01:00
|
13
19
|
default_executable:
|
14
20
|
dependencies: []
|
15
21
|
|
@@ -31,15 +37,17 @@ files:
|
|
31
37
|
- app/controllers/admin/meta_definitions_controller.rb
|
32
38
|
- app/controllers/documents_controller.rb
|
33
39
|
- app/controllers/sendmail_controller.rb
|
40
|
+
- app/controllers/system/meta_definitions_controller.rb
|
41
|
+
- app/controllers/system/system_controller.rb
|
34
42
|
- app/helpers/admin/documents_helper.rb
|
35
43
|
- app/helpers/documents_helper.rb
|
36
44
|
- app/helpers/sendmail_helper.rb
|
45
|
+
- app/helpers/system/documents_helper.rb
|
37
46
|
- app/models/document.rb
|
38
47
|
- app/models/document_mailer.rb
|
39
48
|
- app/models/document_sweeper.rb
|
40
49
|
- app/models/meta_definition.rb
|
41
50
|
- app/models/sendmail.rb
|
42
|
-
- app/views/admin/admin/system.html.erb
|
43
51
|
- app/views/admin/documents/_form.html.erb
|
44
52
|
- app/views/admin/documents/default.edit.html.erb
|
45
53
|
- app/views/admin/documents/default.new.html.erb
|
@@ -49,6 +57,7 @@ files:
|
|
49
57
|
- app/views/document_mailer/new_document.erb
|
50
58
|
- app/views/layouts/admin.html.erb
|
51
59
|
- app/views/layouts/application.html.erb
|
60
|
+
- app/views/layouts/system.html.erb
|
52
61
|
- app/views/pages/404.html.erb
|
53
62
|
- app/views/pages/contact.html.erb
|
54
63
|
- app/views/pages/default.html.erb
|
@@ -61,16 +70,19 @@ files:
|
|
61
70
|
- app/views/pages/template.erb
|
62
71
|
- app/views/pages/thank_you.html.erb
|
63
72
|
- app/views/sendmail/default.erb
|
73
|
+
- app/views/system/meta_definitions/_form.html.erb
|
74
|
+
- app/views/system/meta_definitions/_meta_definition.html.erb
|
75
|
+
- app/views/system/meta_definitions/edit.html.erb
|
76
|
+
- app/views/system/meta_definitions/index.html.erb
|
77
|
+
- app/views/system/meta_definitions/new.html.erb
|
78
|
+
- app/views/system/system/dashboard.html.erb
|
64
79
|
- config/sitemap.example.yml
|
65
80
|
- db/migrate/20090824150210_create_documents.rb
|
66
81
|
- db/migrate/20091208124512_create_meta_definition.rb
|
67
82
|
- init.rb
|
68
83
|
- install.rb
|
69
84
|
- lib/qcms.rb
|
70
|
-
- lib/tasks/cms.rake
|
71
|
-
- qcms.gemspec
|
72
85
|
- rails/init.rb
|
73
|
-
- tasks/qcms_tasks.rake
|
74
86
|
- test/qwerty_test.rb
|
75
87
|
- test/test_helper.rb
|
76
88
|
- uninstall.rb
|
@@ -84,21 +96,27 @@ rdoc_options:
|
|
84
96
|
require_paths:
|
85
97
|
- lib
|
86
98
|
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
87
100
|
requirements:
|
88
101
|
- - ">="
|
89
102
|
- !ruby/object:Gem::Version
|
103
|
+
hash: 3
|
104
|
+
segments:
|
105
|
+
- 0
|
90
106
|
version: "0"
|
91
|
-
version:
|
92
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
93
109
|
requirements:
|
94
110
|
- - ">="
|
95
111
|
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
113
|
+
segments:
|
114
|
+
- 0
|
96
115
|
version: "0"
|
97
|
-
version:
|
98
116
|
requirements: []
|
99
117
|
|
100
118
|
rubyforge_project:
|
101
|
-
rubygems_version: 1.3.
|
119
|
+
rubygems_version: 1.3.7
|
102
120
|
signing_key:
|
103
121
|
specification_version: 3
|
104
122
|
summary: A CMS built in collaberation with designers
|
data/lib/tasks/cms.rake
DELETED
@@ -1,237 +0,0 @@
|
|
1
|
-
namespace :qwerty do
|
2
|
-
namespace :cms do
|
3
|
-
|
4
|
-
desc "Create some Lipsum entries for a section"
|
5
|
-
task :seed => [:environment] do
|
6
|
-
|
7
|
-
unless ENV['ids']
|
8
|
-
puts 'Supply ids of sections to seed, ids=4,5,12 OR ids=all'
|
9
|
-
Document.roots.each do | d |
|
10
|
-
puts d.title + ': ' + d.id.to_s
|
11
|
-
end
|
12
|
-
exit
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
if ENV['ids'] == 'all'
|
17
|
-
sections = Document.roots.map { |d| d.id }
|
18
|
-
else
|
19
|
-
sections = ENV['ids'].split(',')
|
20
|
-
end
|
21
|
-
|
22
|
-
require 'faker'
|
23
|
-
|
24
|
-
sections.each do | section_id |
|
25
|
-
|
26
|
-
section = Document.find(section_id)
|
27
|
-
|
28
|
-
next if section.meta_definition.children.empty?
|
29
|
-
|
30
|
-
label = ENV['label'] || section.meta_definition.children.first.label
|
31
|
-
num = (ENV['num'] || 15).to_i
|
32
|
-
|
33
|
-
section.children.by_label(label).each { |d| d.destroy }
|
34
|
-
|
35
|
-
puts 'Adding to ' + num.to_s + ' ' + label.pluralize + ' to ' + section.title
|
36
|
-
|
37
|
-
num.times do | ctr |
|
38
|
-
puts ctr.to_s
|
39
|
-
doc = Document.create!(
|
40
|
-
:title => label.titleize + ' #' + (ctr+1).to_s,
|
41
|
-
:author_id => User.first.id,
|
42
|
-
:state => 'published',
|
43
|
-
:published_at => Time.now - ctr.days,
|
44
|
-
:body => Faker::Lorem.paragraphs.join,
|
45
|
-
:parent_id => section.id,
|
46
|
-
:label => label
|
47
|
-
)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
desc "Update meta_definitions from sitemap.yml"
|
53
|
-
task :update_meta_definitions => [:environment] do
|
54
|
-
puts 'Updating Meta Definitions'
|
55
|
-
sitemap = YAML::load(ERB.new(IO.read(File.join(RAILS_ROOT, 'config', 'sitemap.yml'))).result)
|
56
|
-
create_meta_definitions(sitemap)
|
57
|
-
if @errors_occured
|
58
|
-
puts '*' * 20
|
59
|
-
puts 'ERRORS OCCURED'
|
60
|
-
puts '*' * 20
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def create_meta_definitions(metas, parent_id = nil)
|
65
|
-
metas.each do | k, v |
|
66
|
-
if MetaDefinition.exists?(:parent_id => parent_id, :label => k)
|
67
|
-
|
68
|
-
m = MetaDefinition.find(:first, :conditions => {:parent_id => parent_id, :label => k})
|
69
|
-
m.update_attributes(
|
70
|
-
:label => (v['label'] || k),
|
71
|
-
:parent_id => parent_id,
|
72
|
-
:per_page => v['per_page'],
|
73
|
-
:sort_by => v['sort_by'],
|
74
|
-
# :label_path => v['label_path'],
|
75
|
-
:default_type => v['default_type'] || 'Document',
|
76
|
-
:default_state => v['default_state'],
|
77
|
-
:randomise_permalink => v['randomise_permalink'] || false,
|
78
|
-
:body_length => v['body_length'],
|
79
|
-
:body_strip_html => v['body_strip_html'] || false,
|
80
|
-
:field_map => (YAML.dump(v['field_map']) unless v['field_map'].nil?),
|
81
|
-
:autherisation => (YAML.dump(v['autherisation']) unless v['autherisation'].nil?),
|
82
|
-
:flash_messages => (YAML.dump(v['flash_messages']) unless v['flash_messages'].nil?)
|
83
|
-
|
84
|
-
|
85
|
-
)
|
86
|
-
if m.errors.empty?
|
87
|
-
puts "[UPDATED] #{m.label_path}"
|
88
|
-
else
|
89
|
-
puts "[ERROR] #{m.label_path} #{m.id}"
|
90
|
-
puts m.errors.full_messages
|
91
|
-
@errors_occured = true
|
92
|
-
end
|
93
|
-
|
94
|
-
else
|
95
|
-
m = MetaDefinition.create!(
|
96
|
-
:label => (v['label'] || k),
|
97
|
-
:parent_id => parent_id,
|
98
|
-
:label_path => v['label_path'],
|
99
|
-
:per_page => v['per_page'],
|
100
|
-
:sort_by => v['sort_by'],
|
101
|
-
:default_type => v['default_type'] || 'Document',
|
102
|
-
:default_state => v['default_state'],
|
103
|
-
:randomise_permalink => v['randomise_permalink'] || false,
|
104
|
-
:body_length => v['body_length'],
|
105
|
-
:body_strip_html => v['body_strip_html'] || false,
|
106
|
-
:field_map => (YAML.dump(v['field_map']) unless v['field_map'].nil?),
|
107
|
-
:autherisation => (YAML.dump(v['autherisation']) unless v['autherisation'].nil?),
|
108
|
-
:flash_messages => (YAML.dump(v['flash_messages']) unless v['flash_messages'].nil?)
|
109
|
-
)
|
110
|
-
|
111
|
-
if m.root?
|
112
|
-
d = Document.new(
|
113
|
-
:permalink => m.label,
|
114
|
-
:author_id => User.first.id,
|
115
|
-
:state => 'published',
|
116
|
-
:published_at => Time.now,
|
117
|
-
:title => m.label.titleize,
|
118
|
-
:meta_definition_id => m.id,
|
119
|
-
:label => m.label) # label set manually for roots
|
120
|
-
d.type = m.default_type || 'Document'
|
121
|
-
d.save!
|
122
|
-
end
|
123
|
-
|
124
|
-
puts "[NEW] #{m.label_path}"
|
125
|
-
end
|
126
|
-
|
127
|
-
unless v['children'].nil?
|
128
|
-
create_meta_definitions(v['children'], m.id)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
desc "Delete meta_definitions not in sitemap.yml"
|
134
|
-
task :delete_meta_definitions => [:environment] do
|
135
|
-
puts 'Deleting Meta Definitions'
|
136
|
-
sitemap = YAML::load(ERB.new(IO.read(File.join(RAILS_ROOT, 'config', 'sitemap.yml'))).result)
|
137
|
-
delete_meta_defintions(sitemap, MetaDefinition.roots)
|
138
|
-
end
|
139
|
-
|
140
|
-
def delete_meta_defintions(sitemap, metas)
|
141
|
-
metas.each do | md |
|
142
|
-
if sitemap && sitemap[md.label]
|
143
|
-
delete_meta_defintions(sitemap[md.label]['children'], md.children) if md.children
|
144
|
-
else
|
145
|
-
puts 'Deleting ' + md.label_path
|
146
|
-
md.destroy
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
desc "Overwrite sitemap.yml from Database"
|
152
|
-
task :update_sitemap_from_db => [:environment] do
|
153
|
-
meta_definitions = MetaDefinition.find(:all, :order => 'label_path', :conditions => { :parent_id => nil })
|
154
|
-
sitemap = make_sitemap(meta_definitions)
|
155
|
-
sitemap = sitemap.to_yaml.gsub("!ruby/symbol ", ":").sub("---","").split("\n").map(&:rstrip).join("\n").strip
|
156
|
-
File.open(File.join(RAILS_ROOT, 'config', 'sitemap.yml'), 'w') {|f| f.write(sitemap) }
|
157
|
-
end
|
158
|
-
|
159
|
-
def make_sitemap(meta_definitions)
|
160
|
-
fields = %w(notify_admins record_hits per_page sort_by default_type default_state randomise_permalink body_length body_strip_html field_map autherisation flash_messages)
|
161
|
-
|
162
|
-
sitemap = {}
|
163
|
-
|
164
|
-
meta_definitions.each do | md |
|
165
|
-
sitemap[md.label] = {}
|
166
|
-
|
167
|
-
fields.each do | field |
|
168
|
-
value = md.send(field)
|
169
|
-
value = 'true' if value.is_a? TrueClass
|
170
|
-
value = 'false' if value.is_a? FalseClass
|
171
|
-
sitemap[md.label][field] = value if value && !(value.respond_to?('empty?') && value.empty?)
|
172
|
-
end
|
173
|
-
|
174
|
-
# recursive
|
175
|
-
sitemap[md.label]['children'] = make_sitemap(md.children) unless md.children.empty?
|
176
|
-
end
|
177
|
-
|
178
|
-
return sitemap
|
179
|
-
end
|
180
|
-
|
181
|
-
desc "Generate Site from Meta Definitions"
|
182
|
-
task :build_site => [:update_meta_definitions] do
|
183
|
-
puts "Building Site"
|
184
|
-
|
185
|
-
if User.all.empty?
|
186
|
-
puts "Add some users first: rake qwerty:core:seed"
|
187
|
-
exit
|
188
|
-
end
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
MetaDefinition.roots.each do | meta_definition |
|
193
|
-
next if meta_definition.label == 'page' # special case
|
194
|
-
next if meta_definition.children.empty?
|
195
|
-
unless Document.exists?(:path => meta_definition.label_path)
|
196
|
-
|
197
|
-
puts "[NEW] #{meta_definition.label}"
|
198
|
-
d=Document.new(
|
199
|
-
:permalink => meta_definition.label,
|
200
|
-
:author_id => User.first.id,
|
201
|
-
:state => 'published',
|
202
|
-
:published_at => Time.now,
|
203
|
-
:title => meta_definition.label.titleize,
|
204
|
-
:meta_definition_id => meta_definition.id,
|
205
|
-
:label => meta_definition.label) # label set manually for roots
|
206
|
-
d.type = meta_definition.default_type || 'Document'
|
207
|
-
d.save!
|
208
|
-
else
|
209
|
-
puts "[SKIP] #{meta_definition.label} already exists"
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
# NOTE: If you get an 'nil' error here it is because you don't have a root document called 'page'
|
214
|
-
%w(home contact sitemap).each do | title |
|
215
|
-
unless Document.exists?(:permalink => title)
|
216
|
-
d=Document.new(
|
217
|
-
:permalink => title,
|
218
|
-
:author_id => User.first,
|
219
|
-
:title => title.titleize,
|
220
|
-
:state => 'published',
|
221
|
-
:published_at => Time.now,
|
222
|
-
:meta_definition_id => MetaDefinition.find_by_label_path('page').id,
|
223
|
-
:label => 'page')
|
224
|
-
d.type = 'Document'
|
225
|
-
d.save!
|
226
|
-
else
|
227
|
-
puts "[SKIP] #{title} already exists"
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
task :rebuild_site => [:environment] do
|
233
|
-
MetaDefinition.destroy_all # will cause deletion of all documents as well
|
234
|
-
Rake::Task['qwerty:cms:build_site'].invoke
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
data/qcms.gemspec
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{qcms}
|
8
|
-
s.version = "1.3.3"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Kris Leech"]
|
12
|
-
s.date = %q{2010-08-27}
|
13
|
-
s.description = %q{Key CMS features: extended template pathing, sitemap.yml, simple configurable, deeply nestable content}
|
14
|
-
s.email = %q{kris.leech@interkonect.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"README"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
".gitignore",
|
20
|
-
"README",
|
21
|
-
"Rakefile",
|
22
|
-
"VERSION",
|
23
|
-
"app/controllers/admin/admin_controller.rb",
|
24
|
-
"app/controllers/admin/documents_controller.rb",
|
25
|
-
"app/controllers/admin/meta_definitions_controller.rb",
|
26
|
-
"app/controllers/documents_controller.rb",
|
27
|
-
"app/controllers/sendmail_controller.rb",
|
28
|
-
"app/helpers/admin/documents_helper.rb",
|
29
|
-
"app/helpers/documents_helper.rb",
|
30
|
-
"app/helpers/sendmail_helper.rb",
|
31
|
-
"app/models/document.rb",
|
32
|
-
"app/models/document_mailer.rb",
|
33
|
-
"app/models/document_sweeper.rb",
|
34
|
-
"app/models/meta_definition.rb",
|
35
|
-
"app/models/sendmail.rb",
|
36
|
-
"app/views/admin/admin/system.html.erb",
|
37
|
-
"app/views/admin/documents/_form.html.erb",
|
38
|
-
"app/views/admin/documents/default.edit.html.erb",
|
39
|
-
"app/views/admin/documents/default.new.html.erb",
|
40
|
-
"app/views/admin/documents/default.show.html.erb",
|
41
|
-
"app/views/admin/documents/index.html.erb",
|
42
|
-
"app/views/admin/documents/shared/_resource_link.html.erb",
|
43
|
-
"app/views/document_mailer/new_document.erb",
|
44
|
-
"app/views/layouts/admin.html.erb",
|
45
|
-
"app/views/layouts/application.html.erb",
|
46
|
-
"app/views/pages/404.html.erb",
|
47
|
-
"app/views/pages/contact.html.erb",
|
48
|
-
"app/views/pages/default.html.erb",
|
49
|
-
"app/views/pages/feed.rss.builder",
|
50
|
-
"app/views/pages/home.html.erb",
|
51
|
-
"app/views/pages/search.html.erb",
|
52
|
-
"app/views/pages/shared/_archived_pages.erb",
|
53
|
-
"app/views/pages/shared/_related_pages.html.erb",
|
54
|
-
"app/views/pages/sitemap.html.erb",
|
55
|
-
"app/views/pages/template.erb",
|
56
|
-
"app/views/pages/thank_you.html.erb",
|
57
|
-
"app/views/sendmail/default.erb",
|
58
|
-
"config/sitemap.example.yml",
|
59
|
-
"db/migrate/20090824150210_create_documents.rb",
|
60
|
-
"db/migrate/20091208124512_create_meta_definition.rb",
|
61
|
-
"init.rb",
|
62
|
-
"install.rb",
|
63
|
-
"lib/qcms.rb",
|
64
|
-
"lib/tasks/cms.rake",
|
65
|
-
"qcms.gemspec",
|
66
|
-
"rails/init.rb",
|
67
|
-
"tasks/qcms_tasks.rake",
|
68
|
-
"test/qwerty_test.rb",
|
69
|
-
"test/test_helper.rb",
|
70
|
-
"uninstall.rb"
|
71
|
-
]
|
72
|
-
s.homepage = %q{http://github.com/krisleech/qcms}
|
73
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
74
|
-
s.require_paths = ["lib"]
|
75
|
-
s.rubygems_version = %q{1.3.5}
|
76
|
-
s.summary = %q{A CMS built in collaberation with designers}
|
77
|
-
s.test_files = [
|
78
|
-
"test/qwerty_test.rb",
|
79
|
-
"test/test_helper.rb"
|
80
|
-
]
|
81
|
-
|
82
|
-
if s.respond_to? :specification_version then
|
83
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
84
|
-
s.specification_version = 3
|
85
|
-
|
86
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
87
|
-
else
|
88
|
-
end
|
89
|
-
else
|
90
|
-
end
|
91
|
-
end
|
data/tasks/qcms_tasks.rake
DELETED
@@ -1,223 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
namespace :qwerty do
|
4
|
-
namespace :cms do
|
5
|
-
|
6
|
-
task :hello do
|
7
|
-
puts 'world'
|
8
|
-
end
|
9
|
-
|
10
|
-
task :add_view_path_code => [:environment] do
|
11
|
-
@total = 0
|
12
|
-
[File.join(RAILS_ROOT)].each do |root_path|
|
13
|
-
|
14
|
-
puts root_path
|
15
|
-
|
16
|
-
Dir[root_path + '/**/*.html.erb'].each do |path|
|
17
|
-
|
18
|
-
File.open(path, "r") do |file|
|
19
|
-
@process = true
|
20
|
-
while (line = file.gets)
|
21
|
-
if line.include? 'content_for :debug_info'
|
22
|
-
@process = false
|
23
|
-
break
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
if @process
|
29
|
-
@total = @total + 1
|
30
|
-
puts "Adding to #{path}"
|
31
|
-
File.open(path, 'a') do | file |
|
32
|
-
file.puts "<% content_for :debug_info do %>"
|
33
|
-
file.puts "VIEW:<%= __FILE__ %><br>"
|
34
|
-
file.puts "<% end %>"
|
35
|
-
end
|
36
|
-
else
|
37
|
-
puts "Not adding to #{path}"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
puts '---'
|
42
|
-
puts "TOTAL: #{@total}"
|
43
|
-
end
|
44
|
-
|
45
|
-
desc "Load some sample data"
|
46
|
-
task :seed => [:rebuild_site] do
|
47
|
-
titles = ['My First Blog Post', 'My Second Blog Post']
|
48
|
-
titles.size.times do | ctr |
|
49
|
-
|
50
|
-
doc = Document.create(
|
51
|
-
:title => titles[ctr-1],
|
52
|
-
:author_id => User.first.id,
|
53
|
-
:state => 'published',
|
54
|
-
:published_at => Time.now - ctr.days,
|
55
|
-
:body => 'Some Content Goes Here',
|
56
|
-
:parent_id => Document['blog'].id,
|
57
|
-
:label => 'post'
|
58
|
-
)
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
desc "Update meta_definitions from sitemap.yml"
|
64
|
-
task :update_meta_definitions => [:environment] do
|
65
|
-
puts 'Updating Meta Definitions'
|
66
|
-
sitemap = YAML::load(ERB.new(IO.read(File.join(RAILS_ROOT, 'config', 'sitemap.yml'))).result)
|
67
|
-
create_meta_definitions(sitemap)
|
68
|
-
end
|
69
|
-
|
70
|
-
def create_meta_definitions(metas, parent_id = nil)
|
71
|
-
metas.each do | k, v |
|
72
|
-
if MetaDefinition.exists?(:parent_id => parent_id, :label => k)
|
73
|
-
|
74
|
-
m = MetaDefinition.find(:first, :conditions => {:parent_id => parent_id, :label => k})
|
75
|
-
m.update_attributes(
|
76
|
-
:label => (v['label'] || k),
|
77
|
-
:parent_id => parent_id,
|
78
|
-
:per_page => v['per_page'],
|
79
|
-
:sort_by => v['sort_by'],
|
80
|
-
:label_path => v['label_path'],
|
81
|
-
:default_type => v['default_type'] || 'Document',
|
82
|
-
:default_state => v['default_state'],
|
83
|
-
:randomise_permalink => v['randomise_permalink'] || false,
|
84
|
-
:body_length => v['body_length'],
|
85
|
-
:body_strip_html => v['body_strip_html'] || false,
|
86
|
-
:field_map => (YAML.dump(v['field_map']) unless v['field_map'].nil?),
|
87
|
-
:autherisation => (YAML.dump(v['autherisation']) unless v['autherisation'].nil?),
|
88
|
-
:flash_messages => (YAML.dump(v['flash_messages']) unless v['flash_messages'].nil?)
|
89
|
-
|
90
|
-
|
91
|
-
)
|
92
|
-
puts "[UPDATED] #{m.label_path}"
|
93
|
-
else
|
94
|
-
m = MetaDefinition.create!(
|
95
|
-
:label => (v['label'] || k),
|
96
|
-
:parent_id => parent_id,
|
97
|
-
:label_path => v['label_path'],
|
98
|
-
:per_page => v['per_page'],
|
99
|
-
:sort_by => v['sort_by'],
|
100
|
-
:default_type => v['default_type'] || 'Document',
|
101
|
-
:default_state => v['default_state'],
|
102
|
-
:randomise_permalink => v['randomise_permalink'] || false,
|
103
|
-
:body_length => v['body_length'],
|
104
|
-
:body_strip_html => v['body_strip_html'] || false,
|
105
|
-
:field_map => (YAML.dump(v['field_map']) unless v['field_map'].nil?),
|
106
|
-
:autherisation => (YAML.dump(v['autherisation']) unless v['autherisation'].nil?),
|
107
|
-
:flash_messages => (YAML.dump(v['flash_messages']) unless v['flash_messages'].nil?)
|
108
|
-
)
|
109
|
-
puts "[NEW] #{m.label_path}"
|
110
|
-
end
|
111
|
-
|
112
|
-
unless v['children'].nil?
|
113
|
-
create_meta_definitions(v['children'], m.id)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
desc "Overwrite sitemap.yml from Database"
|
119
|
-
task :update_sitemap_from_db => [:environment] do
|
120
|
-
meta_definitions = MetaDefinition.find(:all, :order => 'label_path', :conditions => { :parent_id => nil })
|
121
|
-
sitemap = make_sitemap(meta_definitions)
|
122
|
-
sitemap = sitemap.to_yaml.gsub("!ruby/symbol ", ":").sub("---","").split("\n").map(&:rstrip).join("\n").strip
|
123
|
-
File.open(File.join(RAILS_ROOT, 'config', 'sitemap.yml'), 'w') {|f| f.write(sitemap) }
|
124
|
-
end
|
125
|
-
|
126
|
-
def make_sitemap(meta_definitions)
|
127
|
-
fields = %w(label_path record_hits per_page sort_by default_type default_state randomise_permalink body_length body_strip_html field_map autherisation flash_messages)
|
128
|
-
|
129
|
-
sitemap = {}
|
130
|
-
|
131
|
-
meta_definitions.each do | md |
|
132
|
-
sitemap[md.label] = {}
|
133
|
-
|
134
|
-
fields.each do | field |
|
135
|
-
value = md.send(field)
|
136
|
-
value = 'true' if value.is_a? TrueClass
|
137
|
-
value = 'false' if value.is_a? FalseClass
|
138
|
-
sitemap[md.label][field] = value if value && !(value.respond_to?('empty?') && value.empty?)
|
139
|
-
end
|
140
|
-
|
141
|
-
# recursive
|
142
|
-
sitemap[md.label]['children'] = make_sitemap(md.children) unless md.children.empty?
|
143
|
-
end
|
144
|
-
|
145
|
-
return sitemap
|
146
|
-
end
|
147
|
-
|
148
|
-
desc "Generate Site from Meta Definitions"
|
149
|
-
task :build_site => [:update_meta_definitions] do
|
150
|
-
puts "Building Site"
|
151
|
-
|
152
|
-
if User.all.empty?
|
153
|
-
puts "Add some users first: rake qwerty:core:seed"
|
154
|
-
exit
|
155
|
-
end
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
MetaDefinition.roots.each do | meta_definition |
|
160
|
-
next if meta_definition.label == 'page' # special case
|
161
|
-
next if meta_definition.children.empty?
|
162
|
-
unless Document.exists?(:path => meta_definition.label_path)
|
163
|
-
|
164
|
-
puts "[NEW] #{meta_definition.label}"
|
165
|
-
d=Document.new(
|
166
|
-
:permalink => meta_definition.label,
|
167
|
-
:author_id => User.first.id,
|
168
|
-
:state => 'published',
|
169
|
-
:published_at => Time.now,
|
170
|
-
:title => meta_definition.label.titleize,
|
171
|
-
:meta_definition_id => meta_definition.id,
|
172
|
-
:label => meta_definition.label) # label set manually for roots
|
173
|
-
d.type = meta_definition.default_type || 'Document'
|
174
|
-
d.save!
|
175
|
-
else
|
176
|
-
puts "[SKIP] #{meta_definition.label} already exists"
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
%w(home contact sitemap).each do | title |
|
181
|
-
unless Document.exists?(:permalink => title)
|
182
|
-
d=Document.new(
|
183
|
-
:permalink => title,
|
184
|
-
:author_id => User.first,
|
185
|
-
:title => title.titleize,
|
186
|
-
:state => 'published',
|
187
|
-
:published_at => Time.now,
|
188
|
-
:meta_definition_id => MetaDefinition.find_by_label_path('page').id,
|
189
|
-
:label => 'page')
|
190
|
-
d.type = 'Document'
|
191
|
-
d.save!
|
192
|
-
else
|
193
|
-
puts "[SKIP] #{title} already exists"
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
task :rebuild_site => [:environment] do
|
199
|
-
MetaDefinition.destroy_all # will cause deletion of all documents as well
|
200
|
-
Rake::Task['qwerty:cms:build_site'].invoke
|
201
|
-
end
|
202
|
-
|
203
|
-
desc 'Create YAML test fixtures from data in an existing database.
|
204
|
-
Defaults to development database. Set RAILS_ENV to override.'
|
205
|
-
task :extract_fixtures => :environment do
|
206
|
-
require 'Ya2YAML'
|
207
|
-
sql = "SELECT * FROM %s"
|
208
|
-
skip_tables = ["schema_info"]
|
209
|
-
ActiveRecord::Base.establish_connection
|
210
|
-
(ActiveRecord::Base.connection.tables - skip_tables).each do |table_name|
|
211
|
-
i = "000"
|
212
|
-
File.open("#{RAILS_ROOT}/test/fixtures/#{table_name}.yml", 'w') do |file|
|
213
|
-
data = ActiveRecord::Base.connection.select_all(sql % table_name)
|
214
|
-
file.write data.inject({}) { |hash, record|
|
215
|
-
hash["#{table_name}_#{i.succ!}"] = record
|
216
|
-
hash
|
217
|
-
}.ya2yaml
|
218
|
-
end
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
end
|
223
|
-
end
|