zen 0.2.4.1 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. data/MANIFEST +42 -33
  2. data/README.md +14 -27
  3. data/ROADMAP.md +20 -2
  4. data/{Thorfile → Rakefile} +2 -3
  5. data/bin/zen +27 -5
  6. data/lib/zen.rb +70 -52
  7. data/lib/zen/asset.rb +258 -0
  8. data/lib/zen/bin/app.rb +42 -0
  9. data/lib/zen/controller/admin_controller.rb +53 -36
  10. data/lib/zen/controller/base_controller.rb +13 -8
  11. data/lib/zen/controller/frontend_controller.rb +4 -3
  12. data/lib/zen/controller/main_controller.rb +17 -33
  13. data/lib/zen/error/validation_error.rb +10 -0
  14. data/lib/zen/ext/string.rb +185 -0
  15. data/lib/zen/helper/acl.rb +120 -92
  16. data/lib/zen/helper/common.rb +1 -3
  17. data/lib/zen/helper/theme.rb +73 -0
  18. data/lib/zen/language.rb +66 -57
  19. data/lib/zen/layout/admin.xhtml +5 -48
  20. data/lib/zen/layout/login.xhtml +4 -44
  21. data/lib/zen/model/methods.rb +1 -1
  22. data/lib/zen/model/settings.rb +0 -3
  23. data/lib/zen/package.rb +101 -83
  24. data/lib/zen/package/base.rb +62 -0
  25. data/lib/zen/package/categories/lib/categories.rb +29 -10
  26. data/lib/zen/package/categories/lib/categories/controller/categories.rb +4 -5
  27. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +4 -5
  28. data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +4 -3
  29. data/lib/zen/package/categories/lib/categories/model/category.rb +2 -2
  30. data/lib/zen/package/categories/lib/categories/model/category_group.rb +3 -3
  31. data/lib/zen/package/categories/lib/categories/plugin/categories.rb +130 -0
  32. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +1 -1
  33. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +2 -2
  34. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +11 -6
  35. data/lib/zen/package/comments/lib/comments.rb +23 -13
  36. data/lib/zen/package/comments/lib/comments/controller/comments.rb +4 -5
  37. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +7 -8
  38. data/lib/zen/package/comments/lib/comments/model/comment.rb +4 -4
  39. data/lib/zen/package/comments/lib/comments/plugin/comments.rb +111 -0
  40. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +2 -2
  41. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +3 -3
  42. data/lib/zen/package/custom_fields/lib/custom_fields.rb +18 -11
  43. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +4 -5
  44. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +4 -5
  45. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +2 -2
  46. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +3 -3
  47. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +3 -3
  48. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +9 -5
  49. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +1 -1
  50. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +3 -3
  51. data/lib/zen/package/menus/lib/menus.rb +25 -43
  52. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +5 -6
  53. data/lib/zen/package/menus/lib/menus/controller/menus.rb +9 -5
  54. data/lib/zen/package/menus/lib/menus/helper/menu_item.rb +4 -4
  55. data/lib/zen/package/menus/lib/menus/model/menu.rb +2 -2
  56. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +4 -1
  57. data/lib/zen/package/menus/lib/menus/plugin/menus.rb +152 -0
  58. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +1 -1
  59. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +3 -3
  60. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +7 -7
  61. data/lib/zen/package/sections/lib/sections.rb +32 -16
  62. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +9 -18
  63. data/lib/zen/package/sections/lib/sections/controller/sections.rb +8 -9
  64. data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +1 -1
  65. data/lib/zen/package/sections/lib/sections/model/section.rb +4 -4
  66. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +9 -10
  67. data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +224 -0
  68. data/lib/zen/package/sections/lib/sections/plugin/sections.rb +85 -0
  69. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +1 -1
  70. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +9 -5
  71. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +2 -2
  72. data/lib/zen/package/settings/lib/settings.rb +145 -10
  73. data/lib/zen/package/settings/lib/settings/controller/settings.rb +28 -24
  74. data/lib/zen/package/settings/lib/settings/language/en/settings.yml +10 -0
  75. data/lib/zen/package/settings/lib/settings/model/setting.rb +3 -64
  76. data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +40 -0
  77. data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +76 -0
  78. data/lib/zen/package/settings/lib/settings/plugin/settings.rb +236 -0
  79. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +20 -49
  80. data/lib/zen/package/settings/migrations/1295597111_create_schema.rb +0 -12
  81. data/lib/zen/package/settings/migrations/1303196915_settings_plugin.rb +31 -0
  82. data/lib/zen/package/users/lib/users.rb +18 -15
  83. data/lib/zen/package/users/lib/users/controller/access_rules.rb +44 -8
  84. data/lib/zen/package/users/lib/users/controller/user_groups.rb +4 -5
  85. data/lib/zen/package/users/lib/users/controller/users.rb +5 -6
  86. data/lib/zen/package/users/lib/users/language/en/access_rules.yml +11 -9
  87. data/lib/zen/package/users/lib/users/model/access_rule.rb +7 -6
  88. data/lib/zen/package/users/lib/users/model/user.rb +4 -4
  89. data/lib/zen/package/users/lib/users/model/user_group.rb +3 -3
  90. data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +50 -0
  91. data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +32 -29
  92. data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +8 -6
  93. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +3 -3
  94. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +2 -2
  95. data/lib/zen/package/users/migrations/1303510943_class_rules.rb +13 -0
  96. data/lib/zen/plugin.rb +110 -104
  97. data/lib/zen/plugin/base.rb +46 -0
  98. data/lib/zen/{liquid/controller_behavior.rb → plugin/controller.rb} +9 -7
  99. data/lib/zen/plugin/helper.rb +47 -0
  100. data/lib/zen/plugin/markup/lib/markup.rb +14 -0
  101. data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +6 -0
  102. data/lib/zen/plugin/markup/lib/markup/markup.rb +154 -0
  103. data/lib/zen/public/admin/css/forms.css +4 -0
  104. data/lib/zen/public/admin/css/general.css +15 -15
  105. data/lib/zen/public/admin/css/layout.css +10 -10
  106. data/lib/zen/public/admin/css/reset.css +123 -0
  107. data/lib/zen/public/admin/images/icons/accept.png +0 -0
  108. data/lib/zen/public/admin/images/icons/add.png +0 -0
  109. data/lib/zen/public/admin/images/icons/back.png +0 -0
  110. data/lib/zen/public/admin/images/icons/bold.png +0 -0
  111. data/lib/zen/public/admin/images/icons/close.png +0 -0
  112. data/lib/zen/public/admin/images/icons/delete.png +0 -0
  113. data/lib/zen/public/admin/images/icons/edit.png +0 -0
  114. data/lib/zen/public/admin/images/icons/error.png +0 -0
  115. data/lib/zen/public/admin/images/icons/help.png +0 -0
  116. data/lib/zen/public/admin/images/icons/info.png +0 -0
  117. data/lib/zen/public/admin/images/icons/italic.png +0 -0
  118. data/lib/zen/public/admin/images/icons/large/error.png +0 -0
  119. data/lib/zen/public/admin/images/icons/large/notice.png +0 -0
  120. data/lib/zen/public/admin/images/icons/large/success.png +0 -0
  121. data/lib/zen/public/admin/images/icons/link.png +0 -0
  122. data/lib/zen/public/admin/images/icons/logout.png +0 -0
  123. data/lib/zen/public/admin/images/icons/ol.png +0 -0
  124. data/lib/zen/public/admin/images/icons/pdf.png +0 -0
  125. data/lib/zen/public/admin/images/icons/ul.png +0 -0
  126. data/lib/zen/public/admin/images/icons/user.png +0 -0
  127. data/lib/zen/public/admin/images/icons/view.png +0 -0
  128. data/lib/zen/public/admin/js/mootools/core.js +384 -333
  129. data/lib/zen/public/admin/js/mootools/more.js +256 -231
  130. data/lib/zen/public/admin/js/vendor/{datepicker/Picker.Date.js → datepicker.js} +447 -0
  131. data/lib/zen/public/admin/js/vendor/yepnope.js +1 -0
  132. data/lib/zen/public/admin/js/zen/editor/base.js +8 -1
  133. data/lib/zen/public/admin/js/zen/init.js +89 -26
  134. data/lib/zen/public/favicon.ico +0 -0
  135. data/lib/zen/task.rb +7 -0
  136. data/lib/zen/task/build.rake +60 -0
  137. data/lib/zen/task/clean.rake +27 -0
  138. data/lib/zen/task/db.rake +111 -0
  139. data/lib/zen/task/package.rake +67 -0
  140. data/lib/zen/task/plugin.rake +24 -0
  141. data/lib/zen/task/proto.rake +95 -0
  142. data/lib/zen/task/theme.rake +68 -0
  143. data/lib/zen/theme.rb +28 -55
  144. data/lib/zen/theme/base.rb +64 -0
  145. data/lib/zen/validation.rb +149 -0
  146. data/lib/zen/version.rb +1 -1
  147. data/lib/zen/view/bottom.xhtml +6 -0
  148. data/lib/zen/view/main.xhtml +32 -0
  149. data/proto/app/Rakefile +12 -0
  150. data/proto/app/app.rb +6 -6
  151. data/proto/app/config/config.rb +7 -14
  152. data/proto/app/config/database.rb +0 -20
  153. data/proto/app/start.rb +0 -1
  154. data/proto/app/{vendor/themes → task}/.gitkeep +0 -0
  155. data/proto/app/vendor/theme/.gitkeep +0 -0
  156. data/proto/package/lib/package.rb +8 -17
  157. data/proto/package/lib/package/controller/controllers.rb +4 -4
  158. data/proto/package/lib/package/language/en/languages.yml +3 -3
  159. data/proto/package/lib/package/model/model.rb +1 -1
  160. metadata +73 -73
  161. data/lib/zen/bin/base.rb +0 -109
  162. data/lib/zen/helper/asset.rb +0 -106
  163. data/lib/zen/liquid/general.rb +0 -94
  164. data/lib/zen/liquid/redirect.rb +0 -70
  165. data/lib/zen/liquid/strip.rb +0 -60
  166. data/lib/zen/package/categories/lib/categories/liquid/categories.rb +0 -16
  167. data/lib/zen/package/comments/lib/comments/liquid/comment_form.rb +0 -127
  168. data/lib/zen/package/comments/lib/comments/liquid/comments.rb +0 -115
  169. data/lib/zen/package/menus/lib/menus/liquid/menus.rb +0 -152
  170. data/lib/zen/package/sections/lib/sections/liquid/section_entries.rb +0 -228
  171. data/lib/zen/package/sections/lib/sections/liquid/sections.rb +0 -77
  172. data/lib/zen/package/settings/lib/settings/liquid/setting.rb +0 -58
  173. data/lib/zen/package/users/lib/users/liquid/user.rb +0 -77
  174. data/lib/zen/package/users/lib/users/liquid/users.rb +0 -82
  175. data/lib/zen/plugin/markup.rb +0 -30
  176. data/lib/zen/public/admin/css/boilerplate.css +0 -176
  177. data/lib/zen/public/admin/images/general/noise.jpg +0 -0
  178. data/lib/zen/public/admin/js/vendor/datepicker/Picker.Attach.js +0 -137
  179. data/lib/zen/public/admin/js/vendor/datepicker/Picker.js +0 -291
  180. data/lib/zen/public/admin/js/vendor/datepicker/README.md +0 -325
  181. data/lib/zen/public/admin/js/vendor/datepicker/locale.js +0 -16
  182. data/lib/zen/strict_struct.rb +0 -36
  183. data/lib/zen/task/build.rb +0 -123
  184. data/lib/zen/task/clean.rb +0 -46
  185. data/lib/zen/task/db.rb +0 -130
  186. data/lib/zen/task/package.rb +0 -87
  187. data/lib/zen/task/proto.rb +0 -116
  188. data/lib/zen/task/theme.rb +0 -88
  189. data/proto/app/Thorfile +0 -4
@@ -0,0 +1,62 @@
1
+ #:nodoc:
2
+ module Zen
3
+ #:nodoc:
4
+ module Package
5
+ ##
6
+ # Base class used to store the data about packages such as the name, directory, etc.
7
+ #
8
+ # @author Yorick Peterse
9
+ # @since 0.2.5
10
+ #
11
+ class Base
12
+ include ::Zen::Validation
13
+
14
+ # The name of the package
15
+ attr_accessor :name
16
+
17
+ # The author of the package
18
+ attr_accessor :author
19
+
20
+ # A small description about the package
21
+ attr_accessor :about
22
+
23
+ # The URL to the website of the package
24
+ attr_accessor :url
25
+
26
+ # The root directory of the package
27
+ attr_accessor :directory
28
+
29
+ # Array containing the navigation items for the package
30
+ attr_accessor :menu
31
+
32
+ # Path to the directory containing all migrations
33
+ attr_accessor :migration_dir
34
+
35
+ # Array containing all controllers for the package. These classes will be used
36
+ # by the ACL system.
37
+ attr_accessor :controllers
38
+
39
+ ##
40
+ # Validates all the attributes.
41
+ #
42
+ # @author Yorick Peterse
43
+ # @since 0.2.5
44
+ #
45
+ def validate
46
+ validates_presence([:name, :author, :about, :directory, :controllers])
47
+ validates_format(:name, /[a-z0-9_\-]+/)
48
+ validates_filepath(:directory)
49
+
50
+ if !migration_dir.nil?
51
+ validates_filepath(:migration_dir)
52
+ end
53
+
54
+ # Check if the package hasn't been registered yet
55
+ if ::Zen::Package::Registered.key?(name.to_sym)
56
+ raise(::Zen::ValidationError, "The package #{name} already exists.")
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -1,23 +1,42 @@
1
+ require __DIR__('categories/model/category_group')
2
+ require __DIR__('categories/model/category')
3
+ require __DIR__('categories/controller/category_groups')
4
+ require __DIR__('categories/controller/categories')
5
+ require __DIR__('categories/plugin/categories')
1
6
 
2
- # Load all the classes such as controllers, models and so on.
3
- require __DIR__ 'categories/model/category_group'
4
- require __DIR__ 'categories/model/category'
5
-
6
- require __DIR__ 'categories/controller/category_groups'
7
- require __DIR__ 'categories/controller/categories'
7
+ # Load the language pack manually so it can be used in the block below
8
+ Zen::Language.options.paths.push(__DIR__('categories'))
9
+ Zen::Language.load('categories')
10
+ Zen::Language.load('category_groups')
8
11
 
9
12
  # Describe what this package is all about
10
13
  Zen::Package.add do |p|
11
- p.name = 'Categories'
14
+ p.name = 'categories'
12
15
  p.author = 'Yorick Peterse'
13
16
  p.url = 'http://yorickpeterse.com/'
14
- p.about = "Module for managing categories. Categories can be used to organize section entries."
15
- p.identifier = 'com.zen.categories'
17
+ p.about = "Module for managing categories. Categories can be used to organize
18
+ section entries."
19
+
16
20
  p.directory = __DIR__('categories')
17
21
  p.migration_dir = __DIR__('../migrations')
18
22
 
19
23
  p.menu = [{
20
- :title => "Categories",
24
+ :title => lang('categories.titles.index'),
21
25
  :url => "admin/category-groups"
22
26
  }]
27
+
28
+ # Register all controllers
29
+ p.controllers = {
30
+ lang('categories.titles.index') => Categories::Controller::Categories,
31
+ lang('category_groups.titles.index') => Categories::Controller::CategoryGroups
32
+ }
33
+ end
34
+
35
+ # Register our plugins
36
+ Zen::Plugin.add do |p|
37
+ p.name = 'categories'
38
+ p.author = 'Yorick Peterse'
39
+ p.url = 'http://yorickpeterse.com/'
40
+ p.about = 'Plugin that makes it easier to retrieve categories and category groups.'
41
+ p.plugin = Categories::Plugin::Categories
23
42
  end
@@ -1,7 +1,7 @@
1
1
  #:nodoc:
2
2
  module Categories
3
3
  #:nodoc:
4
- module Controllers
4
+ module Controller
5
5
  ##
6
6
  # Categories can be seen as "tags" for your section entries. They describe the
7
7
  # type of entry just like tags except that categories generally cover larger elements.
@@ -11,11 +11,10 @@ module Categories
11
11
  # @author Yorick Peterse
12
12
  # @since 0.1
13
13
  #
14
- class Categories < Zen::Controllers::AdminController
15
- include ::Categories::Models
14
+ class Categories < Zen::Controller::AdminController
15
+ include ::Categories::Model
16
16
 
17
- map '/admin/categories'
18
- trait :extension_identifier => 'com.zen.categories'
17
+ map('/admin/categories')
19
18
 
20
19
  before_all do
21
20
  csrf_protection(:save, :delete) do
@@ -1,5 +1,5 @@
1
1
  module Categories
2
- module Controllers
2
+ module Controller
3
3
  ##
4
4
  # Category groups can be used to group a number of categories into a single container.
5
5
  # These groups are assigned to a section (rather than individual categories). It's
@@ -9,11 +9,10 @@ module Categories
9
9
  # @author Yorick Peterse
10
10
  # @since 0.1
11
11
  #
12
- class CategoryGroups < Zen::Controllers::AdminController
13
- include ::Categories::Models
12
+ class CategoryGroups < Zen::Controller::AdminController
13
+ include ::Categories::Model
14
14
 
15
- map '/admin/category-groups'
16
- trait :extension_identifier => 'com.zen.categories'
15
+ map('/admin/category-groups')
17
16
 
18
17
  before_all do
19
18
  csrf_protection(:save, :delete) do
@@ -22,9 +22,10 @@ success:
22
22
  delete : 'The category group has been deleted.'
23
23
 
24
24
  errors:
25
- new : 'Failed to add a new category group.'
26
- save : 'Failed to modify the category group.'
27
- delete : 'Failed to delete the category group with ID #%s.'
25
+ new : 'Failed to add a new category group.'
26
+ save : 'Failed to modify the category group.'
27
+ delete : 'Failed to delete the category group with ID #%s.'
28
+ no_delete: 'You need to specify at least one group to delete.'
28
29
 
29
30
  buttons:
30
31
  new : 'Add group'
@@ -1,7 +1,7 @@
1
1
  #:nodoc:
2
2
  module Categories
3
3
  #:nodoc:
4
- module Models
4
+ module Model
5
5
  ##
6
6
  # Model that represents a single category. This model has the following relations:
7
7
  #
@@ -21,7 +21,7 @@ module Categories
21
21
  # @since 0.1
22
22
  #
23
23
  class Category < Sequel::Model
24
- many_to_one :category_group , :class => "Categories::Models::CategoryGroup"
24
+ many_to_one :category_group , :class => "Categories::Model::CategoryGroup"
25
25
  many_to_one :parent , :class => self
26
26
 
27
27
  plugin :sluggable, :source => :name, :frozen => false
@@ -1,7 +1,7 @@
1
1
  #:nodoc:
2
2
  module Categories
3
3
  #:nodoc:
4
- module Models
4
+ module Model
5
5
  ##
6
6
  # Model that represents a single category group. Each category group
7
7
  # has the following relations to other models:
@@ -13,8 +13,8 @@ module Categories
13
13
  # and should be no longer than 255 characters.
14
14
  #
15
15
  class CategoryGroup < Sequel::Model
16
- one_to_many :categories, :class => "Categories::Models::Category"
17
- many_to_many :sections , :class => "Sections::Models::Section"
16
+ one_to_many :categories, :class => "Categories::Model::Category"
17
+ many_to_many :sections , :class => "Sections::Model::Section"
18
18
 
19
19
  ##
20
20
  # Validation rules for our model.
@@ -0,0 +1,130 @@
1
+ #:nodoc
2
+ module Categories
3
+ #:nodoc
4
+ module Plugin
5
+ ##
6
+ # The Categories plugin can be used to display a list of categories
7
+ #
8
+ # ## Usage
9
+ #
10
+ # A basic example of how to use this plugin looks like the following:
11
+ #
12
+ # plugin(:categories, :group => 'blog').each do |category|
13
+ # puts category[:name]
14
+ # end
15
+ #
16
+ # For more information about the available options see
17
+ # Zen::Plugin::Categories#initialize().
18
+ #
19
+ # @author Yorick Peterse
20
+ # @since 0.2.5
21
+ #
22
+ class Categories
23
+ include ::Categories::Model
24
+ include ::Zen::Plugin::Helper
25
+
26
+ ##
27
+ # Creates a new instance of the plugin and stores the configuration options.
28
+ #
29
+ # @author Yorick Peterse
30
+ # @since 0.2.5
31
+ # @param [Hash] options Hash containing a set of options used to determine how the
32
+ # categories should be retrieved and which one should be retrieved.
33
+ # @option options [Integer] :limit The maximum amount of categories to retrieve.
34
+ # @option options [Integer] :offset The row offset, useful for pagination systems.
35
+ # @option options [String/Integer] :group The name or ID of the category group for
36
+ # which to retrieve all categories.
37
+ # @option options [String/Integer] :category The slug or ID of the category to
38
+ # retrieve. Setting this option will cause the plugin to ignore the offset and
39
+ # limit options.
40
+ #
41
+ def initialize(options = {})
42
+ @options = {
43
+ :limit => 20,
44
+ :offset => 0,
45
+ :group => nil,
46
+ :category => nil
47
+ }.merge(options)
48
+
49
+ # Validate the specified options
50
+ if @options[:group].nil? and @options[:category].nil?
51
+ raise(ArgumentError, "You need to specify either a category or category group.")
52
+ end
53
+
54
+ if !@options[:group].nil? and !@options[:category].nil?
55
+ raise(ArgumentError, "You can't specify both a category and a category group.")
56
+ end
57
+
58
+ group_class = @options[:group].class
59
+ cat_class = @options[:category].class
60
+ allowed = [Integer, String, Fixnum]
61
+
62
+ # Validate the types
63
+ if !@options[:group].nil?
64
+ validate_type(@options[:group], :group, allowed)
65
+ end
66
+
67
+ if !@options[:category].nil?
68
+ validate_type(@options[:category], :category, allowed)
69
+ end
70
+
71
+ validate_type(@options[:limit] , :limit , [Fixnum, Integer])
72
+ validate_type(@options[:offset], :offset, [Fixnum, Integer])
73
+ end
74
+
75
+ ##
76
+ # Retrieves all categories based on the given configuration options.
77
+ #
78
+ # @author Yorick Peterse
79
+ # @since 0.2.5
80
+ # @return [Array] A list of all categories.
81
+ #
82
+ def call
83
+ categories = []
84
+
85
+ # Retrieve the categories for a given group]]
86
+ if !@options[:group].nil?
87
+ # Get the group for an ID or a name
88
+ if @options[:group].class == Integer or @options[:group].class == Fixnum
89
+ category_group = CategoryGroup[@options[:group]]
90
+ else
91
+ category_group = CategoryGroup[:name => @options[:group]]
92
+ end
93
+
94
+ # Since we require a group in this case we'll raise an error if the group
95
+ # doesn't exist. If we were to return an empty value this may confuse the
96
+ # developer.
97
+ if category_group.nil?
98
+ raise("No category group could be found for \"#{@options[:group]}\"")
99
+ end
100
+
101
+ # Get all the categories according to our specified configuration options
102
+ # and the category group that was retrieved earlier on.
103
+ categories = Category.filter(:category_group_id => category_group.id)
104
+ .limit(@options[:limit], @options[:offset])
105
+ .all
106
+
107
+ # Retrieve the category for the specified ID or slug
108
+ else
109
+ if @options[:category].class == Integer or @options[:category].class == Fixnum
110
+ categories = Category[@options[:category]]
111
+ else
112
+ categories = Category[:slug => @options[:category]]
113
+ end
114
+ end
115
+
116
+ # Convert all categories to a hash
117
+ if categories.class == Array
118
+ categories.each_with_index do |cat, index|
119
+ categories[index] = cat.values
120
+ end
121
+ else
122
+ categories = categories.values
123
+ end
124
+
125
+ return categories
126
+ end
127
+
128
+ end
129
+ end
130
+ end
@@ -24,7 +24,7 @@ form_for(
24
24
 
25
25
  # Generate the dropdown that contains all possible parent categories
26
26
  parent_categories = {}
27
- Categories::Models::CategoryGroup[@category_group_id].categories.each do |c|
27
+ Categories::Model::CategoryGroup[@category_group_id].categories.each do |c|
28
28
  if c.id != @category.id
29
29
  parent_categories[c.id] = c.name
30
30
  end
@@ -39,7 +39,7 @@
39
39
  <td>
40
40
  #{anchor_to(
41
41
  category.name,
42
- Categories::Controllers::Categories.r(:edit, @category_group_id, category.id)
42
+ Categories::Controller::Categories.r(:edit, @category_group_id, category.id)
43
43
  )}
44
44
  </td>
45
45
  <?r else ?>
@@ -62,7 +62,7 @@
62
62
  <div class="button">
63
63
  #{anchor_to(
64
64
  lang('categories.buttons.new'),
65
- Categories::Controllers::Categories.r(:new, @category_group_id)
65
+ Categories::Controller::Categories.r(:new, @category_group_id)
66
66
  )}
67
67
  </div>
68
68
  <?r end ?>
@@ -20,7 +20,9 @@
20
20
  <th>#{lang('category_groups.labels.id')}</th>
21
21
  <th>#{lang('category_groups.labels.name')}</th>
22
22
 
23
- <?r if user_authorized?([:create]) ?>
23
+ <?r if user_authorized?(
24
+ [:read], true, 'Categories::Controller::Categories'
25
+ ) ?>
24
26
  <th></th>
25
27
  <?r end ?>
26
28
  </tr>
@@ -30,7 +32,8 @@
30
32
  <tr>
31
33
  <?r if user_authorized?([:delete]) ?>
32
34
  <td>
33
- <input type="checkbox" name="category_group_ids[]" value="#{group.id}" />
35
+ <input type="checkbox" name="category_group_ids[]"
36
+ value="#{group.id}" />
34
37
  </td>
35
38
  <?r end ?>
36
39
 
@@ -40,18 +43,20 @@
40
43
  <td>
41
44
  #{anchor_to(
42
45
  group.name,
43
- Categories::Controllers::CategoryGroups.r(:edit, group.id)
46
+ Categories::Controller::CategoryGroups.r(:edit, group.id)
44
47
  )}
45
48
  </td>
46
49
  <?r else ?>
47
50
  <td>#{group.name}</td>
48
51
  <?r end ?>
49
52
 
50
- <?r if user_authorized?([:create]) ?>
53
+ <?r if user_authorized?(
54
+ [:read], true, 'Categories::Controller::Categories'
55
+ ) ?>
51
56
  <td>
52
57
  #{anchor_to(
53
58
  lang('category_groups.labels.manage'),
54
- Categories::Controllers::Categories.r(:index, group.id)
59
+ Categories::Controller::Categories.r(:index, group.id)
55
60
  )}
56
61
  </td>
57
62
  <?r end ?>
@@ -70,7 +75,7 @@
70
75
  <div class="button">
71
76
  #{anchor_to(
72
77
  lang('category_groups.buttons.new'),
73
- Categories::Controllers::CategoryGroups.r(:new)
78
+ Categories::Controller::CategoryGroups.r(:new)
74
79
  )}
75
80
  </div>
76
81
  <?r end ?>
@@ -1,25 +1,35 @@
1
+ require __DIR__('comments/model/comment.rb')
2
+ require __DIR__('comments/controller/comments')
3
+ require __DIR__('comments/controller/comments_form')
4
+ require __DIR__('comments/plugin/comments')
1
5
 
2
- # Load all our classes
3
- require __DIR__ 'comments/model/comment.rb'
4
- require __DIR__ 'comments/controller/comments'
5
- require __DIR__ 'comments/controller/comments_form'
6
- require __DIR__ 'comments/liquid/comments'
7
- require __DIR__ 'comments/liquid/comment_form'
8
-
9
- Liquid::Template.register_tag('comments' , Comments::Liquid::Comments)
10
- Liquid::Template.register_tag('comment_form', Comments::Liquid::CommentForm)
6
+ Zen::Language.options.paths.push(__DIR__('comments'))
7
+ Zen::Language.load('comments')
11
8
 
12
9
  Zen::Package.add do |p|
13
- p.name = 'Comments'
10
+ p.name = 'comments'
14
11
  p.author = 'Yorick Peterse'
15
12
  p.url = 'http://yorickpeterse.com/'
16
- p.about = "Allow users to post comments on any given section entry (as long as the section allows it)."
17
- p.identifier = 'com.zen.comments'
13
+ p.about = "Allow users to post comments on any given section entry (as long as
14
+ the section allows it)."
15
+
18
16
  p.directory = __DIR__('comments')
19
17
  p.migration_dir = __DIR__('../migrations')
20
18
 
21
19
  p.menu = [{
22
- :title => "Comments",
20
+ :title => lang('comments.titles.index'),
23
21
  :url => "admin/comments"
24
22
  }]
23
+
24
+ p.controllers = {
25
+ lang('comments.titles.index') => Comments::Controller::Comments
26
+ }
27
+ end
28
+
29
+ Zen::Plugin.add do |p|
30
+ p.name = 'comments'
31
+ p.author = 'Yorick Peterse'
32
+ p.url = 'http://yorickpeterse.com/'
33
+ p.about = 'Plugin that can be used to retrieve comments.'
34
+ p.plugin = Comments::Plugin::Comments
25
35
  end