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 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