beef-admin_area 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. data/.document +5 -0
  2. data/.gitignore +5 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +7 -0
  5. data/Rakefile +59 -0
  6. data/VERSION +1 -0
  7. data/admin_area.gemspec +168 -0
  8. data/app/controllers/admin/base_controller.rb +8 -0
  9. data/app/controllers/admin/settings_controller.rb +43 -0
  10. data/app/controllers/admin/users_controller.rb +74 -0
  11. data/app/helpers/admin/base_helper.rb +59 -0
  12. data/app/helpers/admin/settings_helper.rb +8 -0
  13. data/app/helpers/admin/users_helper.rb +2 -0
  14. data/app/models/settings.rb +92 -0
  15. data/app/views/admin/base/index.html.erb +2 -0
  16. data/app/views/admin/settings/_form.html.erb +31 -0
  17. data/app/views/admin/settings/update.js.rjs +1 -0
  18. data/app/views/admin/users/index.html.erb +39 -0
  19. data/app/views/admin/users/show.html.erb +37 -0
  20. data/app/views/layouts/admin.html.erb +68 -0
  21. data/config/routes.rb +8 -0
  22. data/generators/admin_area_files/USAGE +8 -0
  23. data/generators/admin_area_files/admin_area_files_generator.rb +114 -0
  24. data/generators/admin_area_files/lib/insert_commands.rb +47 -0
  25. data/generators/admin_area_files/templates/app/models/content_sweeper.rb +43 -0
  26. data/generators/admin_area_files/templates/app/views/admin/settings/show.html.erb +52 -0
  27. data/generators/admin_area_files/templates/config/initializers/admin_area.rb +2 -0
  28. data/generators/admin_area_files/templates/config/initializers/settings.rb +8 -0
  29. data/generators/admin_area_files/templates/lib/tasks/admin_area.rake +10 -0
  30. data/generators/admin_area_files/templates/migration.rb +21 -0
  31. data/generators/admin_area_files/templates/public/images/admin/accept_button.gif +0 -0
  32. data/generators/admin_area_files/templates/public/images/admin/add.png +0 -0
  33. data/generators/admin_area_files/templates/public/images/admin/application_cascade.png +0 -0
  34. data/generators/admin_area_files/templates/public/images/admin/arrow_left.gif +0 -0
  35. data/generators/admin_area_files/templates/public/images/admin/arrow_right.gif +0 -0
  36. data/generators/admin_area_files/templates/public/images/admin/button_bg.gif +0 -0
  37. data/generators/admin_area_files/templates/public/images/admin/cancel_button.gif +0 -0
  38. data/generators/admin_area_files/templates/public/images/admin/cursor_arrow.gif +0 -0
  39. data/generators/admin_area_files/templates/public/images/admin/delete_button.gif +0 -0
  40. data/generators/admin_area_files/templates/public/images/admin/down_icon.gif +0 -0
  41. data/generators/admin_area_files/templates/public/images/admin/edit_button.gif +0 -0
  42. data/generators/admin_area_files/templates/public/images/admin/file-uploads.png +0 -0
  43. data/generators/admin_area_files/templates/public/images/admin/folder.png +0 -0
  44. data/generators/admin_area_files/templates/public/images/admin/folder_image.png +0 -0
  45. data/generators/admin_area_files/templates/public/images/admin/head_bg.gif +0 -0
  46. data/generators/admin_area_files/templates/public/images/admin/image_add.png +0 -0
  47. data/generators/admin_area_files/templates/public/images/admin/images-pointer.png +0 -0
  48. data/generators/admin_area_files/templates/public/images/admin/info_bg.gif +0 -0
  49. data/generators/admin_area_files/templates/public/images/admin/nav_bg.gif +0 -0
  50. data/generators/admin_area_files/templates/public/images/admin/over_button_bg.gif +0 -0
  51. data/generators/admin_area_files/templates/public/images/admin/page_bg.gif +0 -0
  52. data/generators/admin_area_files/templates/public/images/admin/page_white.png +0 -0
  53. data/generators/admin_area_files/templates/public/images/admin/page_white_get.png +0 -0
  54. data/generators/admin_area_files/templates/public/images/admin/page_white_link.png +0 -0
  55. data/generators/admin_area_files/templates/public/images/admin/page_white_stack.png +0 -0
  56. data/generators/admin_area_files/templates/public/images/admin/picture.png +0 -0
  57. data/generators/admin_area_files/templates/public/images/admin/picture_medium.png +0 -0
  58. data/generators/admin_area_files/templates/public/images/admin/picture_square.png +0 -0
  59. data/generators/admin_area_files/templates/public/images/admin/picture_thumb.png +0 -0
  60. data/generators/admin_area_files/templates/public/images/admin/pictures.png +0 -0
  61. data/generators/admin_area_files/templates/public/images/admin/unapproved.png +0 -0
  62. data/generators/admin_area_files/templates/public/images/admin/up_icon.gif +0 -0
  63. data/generators/admin_area_files/templates/public/images/lightwindow/Thumbs.db +0 -0
  64. data/generators/admin_area_files/templates/public/images/lightwindow/ajax-loading.gif +0 -0
  65. data/generators/admin_area_files/templates/public/images/lightwindow/arrow-down.gif +0 -0
  66. data/generators/admin_area_files/templates/public/images/lightwindow/arrow-up.gif +0 -0
  67. data/generators/admin_area_files/templates/public/images/lightwindow/black-70.png +0 -0
  68. data/generators/admin_area_files/templates/public/images/lightwindow/black.png +0 -0
  69. data/generators/admin_area_files/templates/public/images/lightwindow/nextlabel.gif +0 -0
  70. data/generators/admin_area_files/templates/public/images/lightwindow/pattern_148-70.png +0 -0
  71. data/generators/admin_area_files/templates/public/images/lightwindow/pattern_148.gif +0 -0
  72. data/generators/admin_area_files/templates/public/images/lightwindow/prevlabel.gif +0 -0
  73. data/generators/admin_area_files/templates/public/images/textile-editor/background.png +0 -0
  74. data/generators/admin_area_files/templates/public/images/textile-editor/blockquote.png +0 -0
  75. data/generators/admin_area_files/templates/public/images/textile-editor/bold.png +0 -0
  76. data/generators/admin_area_files/templates/public/images/textile-editor/center.png +0 -0
  77. data/generators/admin_area_files/templates/public/images/textile-editor/h1.png +0 -0
  78. data/generators/admin_area_files/templates/public/images/textile-editor/h2.png +0 -0
  79. data/generators/admin_area_files/templates/public/images/textile-editor/h3.png +0 -0
  80. data/generators/admin_area_files/templates/public/images/textile-editor/h4.png +0 -0
  81. data/generators/admin_area_files/templates/public/images/textile-editor/h5.png +0 -0
  82. data/generators/admin_area_files/templates/public/images/textile-editor/h6.png +0 -0
  83. data/generators/admin_area_files/templates/public/images/textile-editor/indent.png +0 -0
  84. data/generators/admin_area_files/templates/public/images/textile-editor/italic.png +0 -0
  85. data/generators/admin_area_files/templates/public/images/textile-editor/justify.png +0 -0
  86. data/generators/admin_area_files/templates/public/images/textile-editor/left.png +0 -0
  87. data/generators/admin_area_files/templates/public/images/textile-editor/link.png +0 -0
  88. data/generators/admin_area_files/templates/public/images/textile-editor/list_bullets.png +0 -0
  89. data/generators/admin_area_files/templates/public/images/textile-editor/list_numbers.png +0 -0
  90. data/generators/admin_area_files/templates/public/images/textile-editor/omega.png +0 -0
  91. data/generators/admin_area_files/templates/public/images/textile-editor/outdent.png +0 -0
  92. data/generators/admin_area_files/templates/public/images/textile-editor/paragraph.png +0 -0
  93. data/generators/admin_area_files/templates/public/images/textile-editor/preview.png +0 -0
  94. data/generators/admin_area_files/templates/public/images/textile-editor/right.png +0 -0
  95. data/generators/admin_area_files/templates/public/images/textile-editor/strikethrough.png +0 -0
  96. data/generators/admin_area_files/templates/public/images/textile-editor/underline.png +0 -0
  97. data/generators/admin_area_files/templates/public/javascripts/admin/application.js +185 -0
  98. data/generators/admin_area_files/templates/public/javascripts/lightwindow.js +1921 -0
  99. data/generators/admin_area_files/templates/public/javascripts/textile-editor-config.js +107 -0
  100. data/generators/admin_area_files/templates/public/javascripts/textile-editor.js +788 -0
  101. data/generators/admin_area_files/templates/public/stylesheets/admin/handheld.css +6 -0
  102. data/generators/admin_area_files/templates/public/stylesheets/admin/ie.css +21 -0
  103. data/generators/admin_area_files/templates/public/stylesheets/admin/print.css +27 -0
  104. data/generators/admin_area_files/templates/public/stylesheets/admin/screen.css +996 -0
  105. data/generators/admin_area_files/templates/public/stylesheets/admin/theme-1.0.css +131 -0
  106. data/generators/admin_area_files/templates/public/stylesheets/lightwindow.css +376 -0
  107. data/generators/admin_area_files/templates/public/stylesheets/textile-editor.css +60 -0
  108. data/generators/admin_scaffold/USAGE +8 -0
  109. data/generators/admin_scaffold/admin_scaffold_generator.rb +53 -0
  110. data/generators/admin_scaffold/lib/insert_commands.rb +61 -0
  111. data/generators/admin_scaffold/templates/admin_controller.rb +83 -0
  112. data/generators/admin_scaffold/templates/admin_index.html.erb +38 -0
  113. data/generators/admin_scaffold/templates/admin_show.html.erb +16 -0
  114. data/generators/admin_scaffold/templates/helper.rb +2 -0
  115. data/generators/admin_scaffold/templates/helper_test.rb +4 -0
  116. data/generators/admin_scaffold/templates/layout.html.erb +17 -0
  117. data/generators/admin_scaffold/templates/style.css +54 -0
  118. data/generators/admin_scaffold/templates/view_controller.rb +14 -0
  119. data/generators/admin_scaffold/templates/view_index.html.erb +17 -0
  120. data/lib/admin_area.rb +82 -0
  121. data/rails/init.rb +4 -0
  122. data/test/admin_area_test.rb +7 -0
  123. data/test/test_helper.rb +10 -0
  124. metadata +206 -0
@@ -0,0 +1,43 @@
1
+ class ContentSweeper < ActionController::Caching::Sweeper
2
+ # observe Article, Comment, Settings
3
+
4
+ def after_save(record)
5
+ case record
6
+ when ::Article, ::Settings
7
+ remove_articles_cache
8
+ when ::Comment
9
+ case record.commentable
10
+ when ::Article
11
+ expire_article(record.commentable)
12
+ end
13
+ end
14
+
15
+ remove_archive_cache
16
+ end
17
+
18
+ def after_destroy(record)
19
+ after_save(record)
20
+ end
21
+
22
+ def expire_article(article)
23
+ expire_page(article_permalink_path(article.published_at.year,article.published_at.month,article.published_at.day,article.permalink)) unless article.published_at.nil?
24
+ end
25
+
26
+ # removes all the articles pages
27
+ def remove_articles_cache
28
+ Article.find(:all).each do |article|
29
+ expire_article(article)
30
+ end
31
+ end
32
+
33
+ # removes the entirety of the articles folder which all the articles archive and
34
+ # pagination stuff is cached in
35
+ def remove_archive_cache
36
+ expire_action(:controller => '/articles', :action => 'index')
37
+ expire_fragment(%r{/articles/page/*})
38
+ expire_fragment(%r{/categories/*})
39
+ articles_folder = ActionController::Base.page_cache_directory + '/articles/'
40
+ FileUtils.rmtree articles_folder if File.exists? articles_folder
41
+ end
42
+
43
+ end
@@ -0,0 +1,52 @@
1
+
2
+ <h1>Settings</h1>
3
+ <fieldset id="general"><legend>General</legend>
4
+ <%= setting_form [['home_page_title','text'],
5
+ ['default_description','text_area'],
6
+ ['default_keywords', 'text_area']] %>
7
+ </fieldset>
8
+
9
+ <fieldset id="contactdetails"><legend>Contact Details</legend>
10
+ <%= setting_form([['site_name','text'],
11
+ ['address_line_1','text'],
12
+ ['address_line_2','text'],
13
+ ['district','text'],
14
+ ['town','text'],
15
+ ['county','text'],
16
+ ['region','text'],
17
+ ['postcode','text'],
18
+ [],
19
+ ['telephone', 'text'],
20
+ ['fax', 'text'],
21
+ ['default_email','text']]) %>
22
+
23
+ </fieldset>
24
+
25
+ <fieldset id="flickrsettings"><legend>Flickr Settings</legend>
26
+ <% if @unauthorised %>
27
+ <p>You are currently unauthorised because <%= @unauthorised %>, please <%= link_to 'login to flickr', @login_url %>
28
+ <% end -%>
29
+ <%= setting_form [['flickr_user_id','text'],
30
+ ['flickr_api_key','text'],
31
+ ['flickr_api_secret','text']] %>
32
+ </fieldset>
33
+
34
+
35
+ <fieldset id="defensio"><legend>Defensio Settings</legend>
36
+ <%= setting_form 'defensio_api_key' %>
37
+ </fieldset>
38
+
39
+ <fieldset id="defensio"><legend>Google Analytics Settings</legend>
40
+ <%= setting_form 'google_analytics_web_property_id' %>
41
+ </fieldset>
42
+
43
+
44
+ <% content_for :sub_content do %>
45
+ <h2>Helpful Tips</h2>
46
+ <h3>Default Description</h3>
47
+ <p>The default description describes a page to a search engine. If you do not fill in the description field for a piece of content (e.g. a news item) this will be used instead.</p>
48
+ <h3>Default Keywords</h3>
49
+ <p>The default keywords help promote a page to a search engine. If you do not fill in the keywords field for a piece of content (e.g. a news item) these will be used instead.</p>
50
+ <h3>Default Email</h3>
51
+ <p>This is the email used by the contact and showreel form. All enquiries to the site will be delivered to this email address.</p>
52
+ <% end %>
@@ -0,0 +1,2 @@
1
+ # A route should match 'admin_[entry_name]_path
2
+ Beef::AdminArea::ADMIN_MENU = [:articles, :categories]
@@ -0,0 +1,8 @@
1
+ # Settings.defaults[:some_setting] = 'footastic'
2
+
3
+ Settings.defaults[:site_name] = 'Beef Core'
4
+ Settings.defaults[:home_page_title] = 'Welcome'
5
+
6
+ Settings.defaults[:default_email] = 'hello@wearebeef.co.uk'
7
+ Settings.defaults[:default_description] = 'Please change me'
8
+ Settings.defaults[:default_keywords] = 'Please, change, me'
@@ -0,0 +1,10 @@
1
+ namespace :admin_area do
2
+
3
+ desc "Create an administrator User"
4
+ task :create_admin_user => :environment do
5
+ user = User.new :name => 'Administrator', :email => 'hello@wearebeef.co.uk', :password => 'passw0rd', :password_confirmation => 'passw0rd'
6
+ user.role = 'admin'
7
+ user.save
8
+ user.confirm_email! if user.valid?
9
+ end
10
+ end
@@ -0,0 +1,21 @@
1
+ class CreateSettingsAndUsers < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :settings, :force => true do |t|
4
+ t.string :var, :null => false
5
+ t.text :value, :null => true
6
+ t.timestamps
7
+ end
8
+
9
+ change_table(:users) do |t|
10
+ t.string :name, :limit => 128
11
+ t.string :role, :limit => 10
12
+ end
13
+ end
14
+
15
+ def self.down
16
+ change_table(:users) do |t|
17
+ t.remove :name, :role
18
+ end
19
+ drop_table :settings
20
+ end
21
+ end
@@ -0,0 +1,185 @@
1
+ // Place your application-specific JavaScript functions and classes here
2
+ // This file is automatically included by javascript_include_tag :defaults
3
+ var generatePassword = function() {
4
+ new Ajax.Request('/admin/users/generate_password', { method: 'get',
5
+ asynchronous:true,
6
+ evalScripts:true});
7
+ };
8
+ var updateStrength = function(pw) {
9
+ var strength = getStrength(pw);
10
+ var width = (100/32)*strength;
11
+ new Effect.Morph('psStrength', {style:'width:'+width+'px', duration:'0.4'});
12
+ };
13
+
14
+ var getStrength = function(passwd) {
15
+ intScore = 0;
16
+ if (passwd.match(/[a-z]/)) // [verified] at least one lower case letter
17
+ {
18
+ intScore = (intScore+1);
19
+ } if (passwd.match(/[A-Z]/)) // [verified] at least one upper case letter
20
+ {
21
+ intScore = (intScore+5);
22
+ } // NUMBERS
23
+ if (passwd.match(/\d+/)) // [verified] at least one number
24
+ {
25
+ intScore = (intScore+5);
26
+ } if (passwd.match(/(\d.*\d.*\d)/)) // [verified] at least three numbers
27
+ {
28
+ intScore = (intScore+5);
29
+ } // SPECIAL CHAR
30
+ if (passwd.match(/[!,@#$%^&*?_~]/)) // [verified] at least one special character
31
+ {
32
+ intScore = (intScore+5);
33
+ } if (passwd.match(/([!,@#$%^&*?_~].*[!,@#$%^&*?_~])/)) // [verified] at least two special characters
34
+ {
35
+ intScore = (intScore+5);
36
+ } // COMBOS
37
+ if (passwd.match(/[a-z]/) && passwd.match(/[A-Z]/)) // [verified] both upper and lower case
38
+ {
39
+ intScore = (intScore+2);
40
+ } if (passwd.match(/\d/) && passwd.match(/\D/)) // [verified] both letters and numbers
41
+ {
42
+ intScore = (intScore+2);
43
+ } // [Verified] Upper Letters, Lower Letters, numbers and special characters
44
+ if (passwd.match(/[a-z]/) && passwd.match(/[A-Z]/) && passwd.match(/\d/) && passwd.match(/[!,@#$%^&*?_~]/))
45
+ {
46
+ intScore = (intScore+2);
47
+ }
48
+ return intScore;
49
+ };
50
+
51
+
52
+ toggle_published_at = function(state) {
53
+ $$("#published_at select").each(function(item) {
54
+ if (state) {
55
+ item.enable();
56
+ } else {
57
+ item.disable();
58
+ }
59
+ });
60
+ };
61
+
62
+ toggle_published_to = function(state) {
63
+ $$("#published_to select").each(function(item) {
64
+ if (state) {
65
+ item.enable();
66
+ } else {
67
+ item.disable();
68
+ }
69
+ });
70
+ };
71
+
72
+ insertAtCursor = function(myField, myValue) {
73
+ //IE support
74
+ if (document.selection) {
75
+ myField.focus();
76
+ sel = document.selection.createRange();
77
+ sel.text = myValue;
78
+ }
79
+ //MOZILLA/NETSCAPE support
80
+ else if (myField.selectionStart || myField.selectionStart == '0') {
81
+ var startPos = myField.selectionStart;
82
+ var endPos = myField.selectionEnd;
83
+ myField.value = myField.value.substring(0, startPos)
84
+ + myValue
85
+ + myField.value.substring(endPos, myField.value.length);
86
+ } else {
87
+ myField.value += myValue;
88
+ }
89
+ };
90
+
91
+ // get and encode the form authenticity token new in Rails 2.0
92
+ // http://www.saynotomilk.com/archives/33
93
+ var AJ = {
94
+ encode_authenticity_token:function(token) {
95
+ return encodeURIComponent($(token).value);
96
+ },
97
+
98
+ authenticity_token:function() {
99
+ return AJ.encode_authenticity_token($$('input[name="authenticity_token"]')[0]);
100
+ },
101
+
102
+ authenticity_token_query_parameter_for_page:function() {
103
+ return 'authenticity_token=' + authenticity_token;
104
+ },
105
+
106
+ ajax_request:function(url) {
107
+ new Ajax.Request(url, {asynchronous:true, evalScripts:true, parameters:AJ.authenticity_token_query_parameter_for_page()});
108
+ }
109
+ };
110
+
111
+ init_featuring = function() {
112
+ $$('a.feature').each(function(link) {
113
+ link.onclick = function() {
114
+ new Ajax.Request(this.href, {
115
+ method: 'get',
116
+ onSuccess : function(response) {
117
+ // If no rjs response
118
+ if (response.responseText.blank()) {
119
+ link.toggleClassName('featured');
120
+ }
121
+ }
122
+ });
123
+ return false;
124
+ };
125
+ });
126
+ };
127
+ document.observe('dom:loaded', init_featuring);
128
+
129
+ init_tabs = function() {
130
+ sub_headings = $$("#sub-content h2");
131
+ if (sub_headings.length > 1) {
132
+ sub_headings.each(function(item) {
133
+ item.addClassName('drop-down');
134
+ if(!item.next().hasClassName("default")) {
135
+ item.next().hide();
136
+ } else {
137
+ item.addClassName('open');
138
+ }
139
+ item.onclick = function() {
140
+ this.toggleClassName('open');
141
+ this.next().toggle();
142
+ return false;
143
+ };
144
+ item.onmouseover = function() { this.addClassName('sfhover'); };
145
+ item.onmouseout = function() { this.removeClassName('sfhover'); };
146
+ });
147
+ }
148
+ };
149
+ document.observe("dom:loaded", init_tabs);
150
+
151
+ init_flash_messages = function() {
152
+
153
+ $$('div.flash').each(function(flash){
154
+ if (!flash.init) {
155
+ flash.blindUp({
156
+ delay: 5,
157
+ afterFinish:function(effect) { effect.element.remove(); }
158
+ });
159
+ flash.onclick = function() {
160
+ this.remove();
161
+ };
162
+ }
163
+ });
164
+ };
165
+ document.observe("dom:loaded", init_flash_messages);
166
+
167
+ function getAssetIDs()
168
+ {
169
+ if ($('asset-list') != undefined)
170
+ {
171
+ var assets = new Array();
172
+ var count = 0;
173
+
174
+ $$('#asset-list li').each(function(li)
175
+ {
176
+ asset_id = li.id.split('-').last();
177
+ assets[count] = asset_id;
178
+ count++;
179
+ });
180
+
181
+ return assets;
182
+ }
183
+
184
+ return [];
185
+ }