qcms 1.3.3 → 1.3.5

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/.gitignore CHANGED
@@ -8,6 +8,7 @@ config/database.yml
8
8
  config/settings.yml
9
9
  config/authorisation.yml
10
10
  nbproject
11
+ .idea
11
12
  pkg/**
12
13
  .yardoc/*
13
14
  doc/*
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.3
1
+ 1.3.5
@@ -3,9 +3,6 @@ class Admin::AdminController < ApplicationController
3
3
 
4
4
  layout 'admin'
5
5
 
6
- def system
7
- end
8
-
9
6
  def dashboard
10
7
  redirect_to admin_documents_path
11
8
  end
@@ -1,6 +1,7 @@
1
1
  class Admin::MetaDefinitionsController < Admin::AdminController
2
2
 
3
3
  def index
4
+ @meta_definition = MetaDefinition.roots
4
5
  end
5
6
 
6
7
  def show
@@ -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
@@ -0,0 +1,8 @@
1
+ class System::SystemController < ApplicationController
2
+ before_filter :require_user
3
+
4
+ layout 'system'
5
+
6
+ def dashboard
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ module System::DocumentsHelper
2
+ end
@@ -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.body_changed? && (!self.summary_changed? or self.summary.blank?)
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(50) if self.title_changed? && (!self.meta_title_changed? or self.meta_title.blank?)
243
- self.meta_description = self.summary.to(50) if self.summary_changed? && (!self.meta_description_changed? or self.meta_description.blank?)
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 DESC'
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-1.3.1.min.js' %>
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-1.3.1.min.js' %>
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,5 @@
1
+ <h3>Edit</h3>
2
+ <% form_for [:system, @meta_definition] do |f| %>
3
+ <%= render :partial => 'form', :object => f %>
4
+ <%= f.submit 'Save' %>
5
+ <% end %>
@@ -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>
@@ -0,0 +1,5 @@
1
+ <h3>New</h3>
2
+ <% form_for [:system, @meta_definition] do |f| %>
3
+ <%= render :partial => 'form', :object => f %>
4
+ <%= f.submit 'Save' %>
5
+ <% end %>
@@ -7,6 +7,7 @@ class CreateDocuments < ActiveRecord::Migration
7
7
  t.text "body"
8
8
  t.string "permalink"
9
9
  t.string "state"
10
+ t.string "url"
10
11
  t.string "label"
11
12
  t.text "path"
12
13
  t.integer "author_id"
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qcms
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
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-08-27 00:00:00 +01:00
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.5
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
@@ -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
@@ -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
@@ -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