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
@@ -1,127 +0,0 @@
1
- require 'ramaze/gestalt'
2
-
3
- #:nodoc:
4
- module Comments
5
- #:nodoc:
6
- module Liquid
7
- ##
8
- # Liquid tag that can be used to generate the required form elements for submitting
9
- # comments. It's important to remember that you still need to define your own
10
- # form fields such as those for the name and Email, this tag merely generates
11
- # the form open/closing tags and a few hidden fields. The following field (names)
12
- # are required when creating a comment form:
13
- #
14
- # * name
15
- # * website
16
- # * email
17
- # * comment
18
- #
19
- # Basic usage of this tag is as following:
20
- #
21
- # {% comment_form section_entry="hello-world" %}
22
- #
23
- # <p>
24
- # <label for="name">Name</label>
25
- # <input type="text" name="name" id="name" />
26
- # </p>
27
- #
28
- # <input type="submit" value="Submit comment" />
29
- #
30
- # {% endcomment_form %}
31
- #
32
- # The following arguments can be used:
33
- #
34
- # * section_entry: the slug of the entry
35
- # * section_entry_id: the ID of the entry
36
- #
37
- # @author Yorick Peterse
38
- # @since 0.1
39
- #
40
- class CommentForm < ::Liquid::Block
41
- include ::Zen::Liquid::General
42
- include ::Zen::Liquid::ControllerBehavior
43
- include ::Ramaze::Helper::CSRF
44
- include ::Ramaze::Helper::BlueForm
45
-
46
- ##
47
- # Creates a new instance of the block and passes the tag name,
48
- # all additional arguments and the HTML to the constructor method.
49
- #
50
- # @author Yorick Peterse
51
- # @param [String] tag_name The name of the tag that was called.
52
- # @param [String] arguments All additional arguments passed as a string.
53
- # @param [String] html The HTML inside the block.
54
- # @since 0.1
55
- #
56
- def initialize(tag_name = 'comments_form', arguments = '', html = '')
57
- super
58
-
59
- @arguments = parse_key_values(arguments)
60
- @args_parsed = false
61
- end
62
-
63
- ##
64
- # Renders the tag block.
65
- #
66
- # @author Yorick Peterse
67
- # @since 0.1
68
- #
69
- def render(context)
70
- if @args_parsed == false
71
- @arguments.each do |k, v|
72
- v = v.to_s
73
-
74
- if context.has_key?(v)
75
- @arguments[k] = h(context[v])
76
- end
77
- end
78
- end
79
-
80
- @args_parsed = true
81
- g = Ramaze::Gestalt.new
82
- user_html = ''
83
-
84
- super(context).each { |h| user_html += h }
85
-
86
- # Get our section to which this form belongs
87
- if @arguments.key?('section_entry')
88
- section_entry = ::Sections::Models::SectionEntry[
89
- :slug => @arguments['section_entry']
90
- ]
91
- else
92
- section_entry = ::Sections::Models::SectionEntry[
93
- @arguments['section_entry_id'].to_i
94
- ]
95
- end
96
-
97
- # Get the section entry's ID
98
- if !section_entry.nil?
99
- section_entry_id = section_entry.id
100
- else
101
- section_entry_id = nil
102
- end
103
-
104
- # Get the user's ID if he/she is logged in
105
- if !session[:user].nil?
106
- user_id = session[:user].id
107
- else
108
- user_id = nil
109
- end
110
-
111
- g_html = form_for(
112
- nil,
113
- :method => :post,
114
- :action => Comments::Controllers::CommentsForm.r(:save)
115
- ) do |f|
116
- f.input_hidden(:csrf_token , get_csrf_token)
117
- f.input_hidden(:section_entry, section_entry_id)
118
- f.input_hidden(:user_id , user_id)
119
-
120
- user_html
121
- end
122
-
123
- return g_html
124
- end
125
- end
126
- end
127
- end
@@ -1,115 +0,0 @@
1
- #:nodoc:
2
- module Comments
3
- #:nodoc:
4
- module Liquid
5
- ##
6
- # Tag that can be used to display a number of comments based on the section entry ID
7
- # or the slug of a section entry.
8
- #
9
- # @example
10
- # {% comments section_entry="hello-world" limit="10" %}
11
- # {{comment}}
12
- # {% endcomments %}
13
- #
14
- # The following arguments can be used for this tag:
15
- #
16
- # * section_entry: the slug of the section entry for which to retrieve all comments
17
- # * limit: the amount of comments to retriee
18
- # * offset: the offset from which to start retrieving comments
19
- #
20
- # @author Yorick Peterse
21
- # @since 0.1
22
- #
23
- class Comments < ::Liquid::Block
24
- include ::Ramaze::Helper::CGI
25
- include ::Zen::Liquid::General
26
-
27
- ##
28
- # Creates a new instance of the block and passes the tag name,
29
- # all additional arguments and the HTML to the constructor method.
30
- #
31
- # @author Yorick Peterse
32
- # @param [String] tag_name The name of the tag that was called.
33
- # @param [String] arguments All additional arguments passed as a string.
34
- # @param [String] html The HTML inside the block.
35
- # @since 0.1
36
- #
37
- def initialize(tag_name = 'comments', arguments = '', html = '')
38
- super
39
-
40
- @arguments = {
41
- 'limit' => nil,
42
- 'offset' => nil
43
- }.merge(parse_key_values(arguments))
44
-
45
- @args_parsed = false
46
-
47
- if !@arguments.key?('section_entry') or @arguments['section_entry'].empty?
48
- raise(
49
- ArgumentError,
50
- "You need to specify a section entry's slug in order to retrieve a set of comments"
51
- )
52
- end
53
- end
54
-
55
- ##
56
- # Retrieves all comments and renders the tag block.
57
- #
58
- # @author Yorick Peterse
59
- # @since 0.1
60
- #
61
- def render context
62
- if @args_parsed == false
63
- @arguments = merge_context(@arguments, context)
64
- end
65
-
66
- @args_parsed = true
67
- result = []
68
- filter_hash = {:status => 'open'}
69
- comments = []
70
- format = nil
71
-
72
- if @arguments.key?('section_entry')
73
- entry = ::Sections::Models::SectionEntry[:slug => @arguments['section_entry']]
74
-
75
- return if entry.nil?
76
- filter_hash[:section_entry_id] = entry.id
77
- end
78
-
79
- comments = ::Comments::Models::Comment
80
- .eager(:user, :section_entry)
81
- .filter(filter_hash)
82
- .limit(@arguments['limit'], @arguments['offset'])
83
-
84
- context['total_rows'] = comments.count
85
-
86
- comments.each_with_index do |comment, index|
87
- context['index'] = index
88
-
89
- if format.nil?
90
- section = comment.section_entry.section
91
- format = section.comment_format
92
- end
93
-
94
- comment.values.each { |k, v| context[k.to_s] = v }
95
-
96
- # Convert the comment body into HTML
97
- context['comment'] = Zen::Plugin.call(
98
- 'com.zen.plugin.markup', format.to_sym, context['comment']
99
- )
100
-
101
- ['email', 'name', 'website'].each do |c|
102
- if context[c].nil? or context[c].empty?
103
- context[c] = comment.user.send(c)
104
- end
105
- end
106
-
107
- result.push(render_all(@nodelist, context))
108
- end
109
-
110
- result.push(render_all(@nodelist, context)) if result.empty?
111
- return result
112
- end
113
- end
114
- end
115
- end
@@ -1,152 +0,0 @@
1
- require 'ramaze/gestalt'
2
-
3
- #:nodoc:
4
- module Menus
5
- #:nodoc:
6
- module Liquid
7
- ##
8
- # The menus tag can be used to display all menu items for a given menu slug or ID.
9
- # Basic usage of this tag is as following:
10
- #
11
- # {% menus slug="main" %}
12
- #
13
- # Given we had a menu of which the slug is "main" the output would look like the this:
14
- #
15
- # <ul>
16
- # <li>
17
- # <a href="http://zen-cms.com/" title="Zen CMS">Zen CMS</a>
18
- # </li>
19
- # </ul>
20
- #
21
- # This tag takes the following arguments:
22
- #
23
- # * slug: the slug of the menu for which to retrieve all items.
24
- # * id: the ID of the menu for which to retrieve all items.
25
- # * order: string (either "asc" or "desc") that will be used to order the menu items.
26
- #
27
- # If both the slug and ID are specified the ID will be used instead of the slug.
28
- #
29
- # @example
30
- # {% menus slug="main" order="asc" %}
31
- #
32
- # @author Yorick Peterse
33
- # @since 0.2a
34
- #
35
- class Menus < ::Liquid::Tag
36
- include ::Zen::Liquid::General
37
-
38
- ##
39
- # Initializes the tag class and converts the arguments string into a key/value
40
- # hash.
41
- #
42
- # @author Yorick Peterse
43
- # @since 0.2a
44
- # @param [String] tag_name The name of the tag ("menus").
45
- # @param [String] arguments All arguments passed as key="value" combinations.
46
- # @param [String] tokens All tokens passed to the tag.
47
- #
48
- def initialize(tag_name = 'menus', arguments = '', tokens = '')
49
- super
50
-
51
- @arguments = {
52
- 'order' => 'desc'
53
- }.merge(parse_key_values(arguments))
54
-
55
- @args_parsed = false
56
- end
57
-
58
- ##
59
- # Retrieves the specified menu, generates the HTML and renders the Liquid template.
60
- #
61
- # @author Yorick Peterse
62
- # @since 0.2a
63
- # @param [Liquid::Context] context The current Liquid instance.
64
- # @return [String] The HTML for the specified navigation menu.
65
- #
66
- def render(context)
67
- if @args_parsed == false
68
- @arguments = merge_context(@arguments, context)
69
- end
70
-
71
- @args_parsed = true
72
- menu_items = []
73
-
74
- if @arguments.key?('id')
75
- menu = ::Menus::Models::Menu[@arguments['slug'].to_i]
76
-
77
- elsif @arguments.key?('slug')
78
- menu = ::Menus::Models::Menu[:slug => @arguments['slug']]
79
-
80
- else
81
- raise(
82
- ArgumentError,
83
- "You need to specify either the ID or the slug in order to retrieve a menu."
84
- )
85
- end
86
-
87
- return if menu.nil?
88
-
89
- menu_items = ::Menus::Models::MenuItem.filter(:menu_id => menu.id)
90
- .order(:order.send(@arguments['order']))
91
-
92
- # Build the navigation menu
93
- @g = ::Ramaze::Gestalt.new
94
- attributes = {}
95
- attributes[:class] = menu.css_class if !menu.css_class.nil?
96
- attributes[:id] = menu.css_id if !menu.css_id.nil?
97
-
98
- # Organize all menu items in a parent/child hierachy
99
- items_ordered = {}
100
-
101
- @g.ul(attributes) do
102
- menu_items.each do |item|
103
- if item.parent_id.nil?
104
- self.menu_item(item)
105
- end
106
- end
107
- end
108
-
109
- return @g.to_s
110
- end
111
-
112
- ##
113
- # Helper method used for generating a <li> and <a> tag for the current navigation
114
- # item. If the item has any sub items those will be generated as well.
115
- #
116
- # @author Yorick Peterse
117
- # @since 0.2a
118
- # @param [Object] item The current navigation item
119
- #
120
- def menu_item(item)
121
- attributes = {}
122
-
123
- if !item.css_class.nil? and !item.css_class.empty?
124
- attributes[:class] = item.css_class
125
- end
126
-
127
- if !item.css_id.nil? and !item.css_id.empty?
128
- attributes[:id] = item.css_id
129
- end
130
-
131
- children = item.children
132
-
133
- @g.li(attributes) do
134
- if !item.url.nil? and !item.url.empty?
135
- @g.a(:href => item.url, :title => item.name) { item.name }
136
- else
137
- @g.span { item.name }
138
- end
139
-
140
- if !children.empty?
141
- @g.ul(:class => :children) do
142
- item.children.each do |i|
143
- self.menu_item(i)
144
- end
145
- end
146
- end
147
- end # end of @g.li(attributes) do
148
- end
149
-
150
- end
151
- end
152
- end
@@ -1,228 +0,0 @@
1
- #:nodoc:
2
- module Sections
3
- #:nodoc:
4
- module Liquid
5
- ##
6
- # The SectionEntries tag can be used to retrieve all section entries
7
- # for the given section. A basic example of this looks like the following:
8
- #
9
- # {% section_entries section="blog" %}
10
- # Do something in here
11
- # {% endsection_entries %}
12
- #
13
- # When using this tag you can specify the following optionally arguments:
14
- #
15
- # * section: the slug of the section for which to retrieve all entries
16
- # * limit: the amount of entries to retrieve
17
- # * offset: the offset from which to start selecting entries
18
- # * section_entry: the slug of the section entry to select
19
- # * order: the sort order type
20
- # * order_by: the name of the column to sort on
21
- # * category: retrieves all entries that are using the specified category
22
- #
23
- # These arguments can be specified as following:
24
- #
25
- # {% section_entries section="blog" limit="10" offset="20" %}
26
- # Do something in here
27
- # {% endsection_entries %}
28
- #
29
- # Inside this block you can output the values of your custom fields by
30
- # calling the variable tag containing the name of the custom field. For example,
31
- # if you have a field called "body" you can output it for each entry as following:
32
- #
33
- # {% section_entries section="blog" limit="10" offset="20" %}
34
- # {{body}}
35
- # {% endsection_entries %}
36
- #
37
- # The following variables are available by default:
38
- #
39
- # * id: the ID of the section entry
40
- # * title: the entry title
41
- # * slug: the entry slug
42
- # * status: the status of the entry
43
- # * created_at
44
- # * updated_at
45
- # * section_id: the ID of the section to which this entry belongs
46
- #
47
- # @example
48
- # {% section_entries section="blog" limit="10" offset="20" %}
49
- # <article>
50
- # <header>
51
- # <h1>{{title}}</h1>
52
- # </header>
53
- #
54
- # {{body}}
55
- # </article>
56
- # {% endsection_entries %}
57
- #
58
- # @author Yorick Peterse
59
- # @since 0.1
60
- #
61
- class SectionEntries < ::Liquid::Block
62
- include ::Ramaze::Helper::CGI
63
- include ::Zen::Liquid::General
64
-
65
- ##
66
- # Creates a new instance of the block and passes the tag name,
67
- # all additional arguments and the HTML to the constructor method.
68
- #
69
- # @author Yorick Peterse
70
- # @since 0.1
71
- # @param [String] tag_name The name of the tag that was called.
72
- # @param [String] arguments All additional arguments passed as a string.
73
- # @param [String] html The HTML inside the block.
74
- #
75
- def initialize(tag_name ='section_entries', arguments = '', html = '')
76
- super
77
-
78
- @arguments = {
79
- 'limit' => 10,
80
- 'offset' => 0,
81
- 'section' => '',
82
- 'order' => 'desc',
83
- 'order_by' => 'id',
84
- 'category' => ''
85
- }.merge(parse_key_values(arguments))
86
-
87
- @args_parsed = false
88
- end
89
-
90
- ##
91
- # Processes the arguments set in the constructor, retrieves all data and renders
92
- # the tag block. When outputting data inside the tag block you can always use the
93
- # following variables regardless on whether there are any section entries:
94
- #
95
- # * total_rows: the amount of rows retrieved
96
- # * index: the current index
97
- #
98
- # Depending on whether you have any entries or not you can use the following
99
- # values as well:
100
- #
101
- # * comments: array containing all comments for each entry
102
- # * categories: array of all categories for each entry
103
- # * user: data about the author of each entry
104
- #
105
- # On top of that you can of course also use your own custom values. Each value
106
- # can be accessed by it's slug.
107
- #
108
- # @author Yorick Peterse
109
- # @since 0.1
110
- #
111
- def render(context)
112
- @arguments = merge_context(@arguments, context) if @args_parsed == false
113
-
114
- @args_parsed = true
115
- result = []
116
- entries = []
117
- filter_hash = {:status => 'published'}
118
-
119
- # ------
120
- # Filter by a section entry's slug
121
- if @arguments.key?('section_entry')
122
- if @arguments['section_entry'].empty?
123
- raise(ArgumentError, "You need to specify a section entry to retrieve")
124
- end
125
-
126
- filter_hash[:slug] = @arguments['section_entry']
127
-
128
- # ------
129
- # Filter by a category's slug
130
- elsif @arguments.key?('category') and !@arguments['category'].empty?
131
- category = ::Categories::Models::Category[:slug => @arguments['category']]
132
-
133
- # Bail out of the category doesn't exist
134
- return result if category.nil?
135
-
136
- # Retrieve the category group
137
- group = category.category_group
138
-
139
- # Now it's time to retrieve all section IDs
140
- filter_hash[:section_id] = group.sections.map { |s| s.id }
141
-
142
- # ------
143
- # Filter by a section's slug
144
- else
145
- if @arguments['section'].empty?
146
- @arguments['section'] = ::Settings::Model::Setting.get_settings[:default_section]
147
- end
148
-
149
- section = ::Sections::Models::Section[:slug => @arguments['section']]
150
-
151
- return result if section.nil?
152
-
153
- filter_hash[:section_id] = section.id
154
- end
155
-
156
- entries = ::Sections::Models::SectionEntry
157
- .eager(:custom_field_values, :categories, :comments, :section, :user)
158
- .filter(filter_hash)
159
- .order(@arguments['order_by'].to_sym.send(@arguments['order']))
160
- .limit(@arguments['limit'], @arguments['offset'])
161
-
162
- context['total_rows'] = entries.count
163
-
164
- entries.each_with_index do |entry, index|
165
- entry.values.each { |k, v| context[k.to_s] = v }
166
-
167
- context['index'] = index
168
- context['categories'] = []
169
- context['comments'] = []
170
- context['user'] = {}
171
-
172
- # Retrieve all categories
173
- entry.categories.each do |c|
174
- values = {}
175
-
176
- c.values.each { |k, v| values[k.to_s] = v }
177
- context['categories'].push(values)
178
- end
179
-
180
- # Get the user for the current entry
181
- if !entry.user.nil?
182
- entry.user.values.each { |k, v| context['user'][k.to_s] = v }
183
- end
184
-
185
- # Retrieve all comments
186
- entry.comments.each do |c|
187
- values = {}
188
-
189
- c.values.each { |k, v| values[k.to_s] = v }
190
-
191
- # Pull the Email, name and website fields from the user table in case the comment
192
- # was posted by somebody who was logged in to the backend.
193
- ['email', 'name', 'website'].each do |m|
194
- if values[m].nil? or values[m].empty?
195
- values[m] = c.user.send(m)
196
- end
197
- end
198
-
199
- values['comment'] = Zen::Plugin.call(
200
- 'com.zen.plugin.markup',
201
- entry.section.comment_format.to_sym,
202
- values['comment']
203
- )
204
-
205
- context['comments'].push(values)
206
- end
207
-
208
- # Get all our custom fields
209
- entry.custom_field_values.each do |field_value|
210
- field = field_value.custom_field
211
- name = field.slug
212
- value = ::Zen::Plugin.call(
213
- 'com.zen.plugin.markup', field.format.to_sym, field_value.value
214
- )
215
-
216
- context[name.to_s] = value
217
- end
218
-
219
- result.push(render_all(@nodelist, context))
220
- end
221
-
222
- result.push(render_all(@nodelist, context)) if result.empty?
223
-
224
- return result
225
- end
226
- end
227
- end
228
- end