camaleon_cms 0.2.1 → 1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of camaleon_cms might be problematic. Click here for more details.

Files changed (266) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +266 -0
  3. data/app/apps/plugins/attack/config/config.json +1 -1
  4. data/app/apps/plugins/contact_form/config/config.json +1 -1
  5. data/app/apps/plugins/contact_form/contact_form_html_helper.rb +15 -10
  6. data/app/apps/plugins/contact_form/front_controller.rb +1 -0
  7. data/app/apps/plugins/contact_form/views/admin_forms/edit.html.erb +1 -2
  8. data/app/apps/plugins/contact_form/views/admin_forms/index.html.erb +1 -1
  9. data/app/apps/plugins/contact_form/views/admin_forms/responses.html.erb +1 -1
  10. data/app/apps/plugins/contact_form/views/forms_shorcode.html.erb +6 -6
  11. data/app/apps/plugins/front_cache/config/config.json +1 -1
  12. data/app/apps/plugins/front_cache/views/admin/settings.html.erb +1 -1
  13. data/app/apps/plugins/visibility_post/config/config.json +1 -1
  14. data/app/apps/themes/camaleon_first/assets/css/style-ver.css.scss +59 -32
  15. data/app/apps/themes/camaleon_first/views/layouts/index.html.erb +2 -2
  16. data/app/apps/themes/default/assets/css/style.css.scss +3 -0
  17. data/app/apps/themes/default/views/category.html.erb +1 -1
  18. data/app/apps/themes/default/views/post_tag.html.erb +1 -1
  19. data/app/apps/themes/default/views/post_type.html.erb +1 -1
  20. data/app/apps/themes/default/views/search.html.erb +1 -1
  21. data/app/apps/themes/new/views/category.html.erb +1 -1
  22. data/app/apps/themes/new/views/layouts/index.html.erb +2 -2
  23. data/app/apps/themes/new/views/post_tag.html.erb +1 -1
  24. data/app/apps/themes/new/views/post_type.html.erb +1 -1
  25. data/app/apps/themes/new/views/search.html.erb +1 -1
  26. data/app/assets/{stylesheets/admin/bootstrap/images → images/admin}/glyphicons-halflings.png +0 -0
  27. data/app/assets/javascripts/admin/actions.js +12 -205
  28. data/app/assets/javascripts/admin/admin-basic-manifest.js +3 -0
  29. data/app/assets/javascripts/admin/admin-manifest.js +14 -4
  30. data/app/assets/javascripts/admin/custom_fields.js +4 -2
  31. data/app/assets/javascripts/admin/data.js +49 -20
  32. data/app/assets/javascripts/admin/elfinder/upload_elfinder.js +4 -4
  33. data/app/assets/javascripts/admin/grid-editor.js +390 -113
  34. data/app/assets/javascripts/admin/i18n.js +22 -0
  35. data/app/assets/javascripts/admin/jquery.validate.js +2 -54
  36. data/app/assets/javascripts/admin/{core.js → libraries.js} +92 -76
  37. data/app/assets/javascripts/admin/login_manifest.js +0 -3
  38. data/app/assets/javascripts/admin/lte/app.js +758 -0
  39. data/app/assets/javascripts/admin/modal.js +76 -22
  40. data/app/assets/javascripts/admin/nav-menu.js +98 -39
  41. data/app/assets/javascripts/admin/post.js +28 -29
  42. data/app/assets/javascripts/admin/tinymce/skins/lightgray/content.min.css.scss +1 -1
  43. data/app/assets/javascripts/admin/tinymce/tinymce.min.js +11 -11
  44. data/app/assets/javascripts/admin/translator.js +9 -7
  45. data/app/assets/javascripts/admin/widgets.js +1 -0
  46. data/app/assets/stylesheets/admin/admin-basic-manifest.css +15 -0
  47. data/app/assets/stylesheets/admin/admin-manifest.css +7 -11
  48. data/app/assets/stylesheets/admin/bootstrap-datepicker.css.scss +472 -0
  49. data/app/assets/stylesheets/admin/bootstrap-datetimepicker.css.scss +339 -0
  50. data/app/assets/stylesheets/admin/colorpicker.css.scss +95 -0
  51. data/app/assets/stylesheets/admin/custom_admin.css.scss +160 -0
  52. data/app/assets/stylesheets/admin/elfinder-manifest.css +1 -1
  53. data/app/assets/stylesheets/admin/grid-editor.css.scss +14 -299
  54. data/app/assets/stylesheets/admin/lte/admin.css.scss +4747 -0
  55. data/app/assets/stylesheets/admin/lte/skins/skin-black-light.css +176 -0
  56. data/app/assets/stylesheets/admin/lte/skins/skin-black.css +154 -0
  57. data/app/assets/stylesheets/admin/lte/skins/skin-blue-light.css +167 -0
  58. data/app/assets/stylesheets/admin/lte/skins/skin-blue.css +142 -0
  59. data/app/assets/stylesheets/admin/lte/skins/skin-green-light.css +156 -0
  60. data/app/assets/stylesheets/admin/lte/skins/skin-green.css +134 -0
  61. data/app/assets/stylesheets/admin/lte/skins/skin-purple-light.css +156 -0
  62. data/app/assets/stylesheets/admin/lte/skins/skin-purple.css +134 -0
  63. data/app/assets/stylesheets/admin/lte/skins/skin-red-light.css +156 -0
  64. data/app/assets/stylesheets/admin/lte/skins/skin-red.css +134 -0
  65. data/app/assets/stylesheets/admin/lte/skins/skin-yellow-light.css +156 -0
  66. data/app/assets/stylesheets/admin/lte/skins/skin-yellow.css +134 -0
  67. data/app/assets/stylesheets/admin/nav-menu.css.scss +33 -0
  68. data/app/controllers/admin/appearances/nav_menus_controller.rb +13 -10
  69. data/app/controllers/admin/appearances/themes_controller.rb +1 -2
  70. data/app/controllers/admin/appearances_controller.rb +0 -4
  71. data/app/controllers/admin/categories_controller.rb +9 -15
  72. data/app/controllers/admin/comments_controller.rb +8 -14
  73. data/app/controllers/admin/grid_editor_controller.rb +55 -0
  74. data/app/controllers/admin/installers_controller.rb +1 -1
  75. data/app/controllers/admin/media_controller.rb +1 -3
  76. data/app/controllers/admin/plugins_controller.rb +2 -2
  77. data/app/controllers/admin/post_tags_controller.rb +9 -18
  78. data/app/controllers/admin/posts/drafts_controller.rb +1 -9
  79. data/app/controllers/admin/posts_controller.rb +12 -15
  80. data/app/controllers/admin/sessions_controller.rb +6 -7
  81. data/app/controllers/admin/settings/custom_fields_controller.rb +4 -9
  82. data/app/controllers/admin/settings/post_types_controller.rb +6 -16
  83. data/app/controllers/admin/settings/sites_controller.rb +5 -7
  84. data/app/controllers/admin/settings_controller.rb +0 -4
  85. data/app/controllers/admin/user_roles_controller.rb +8 -8
  86. data/app/controllers/admin/users_controller.rb +8 -9
  87. data/app/controllers/admin_controller.rb +4 -5
  88. data/app/controllers/apps/plugins_admin_controller.rb +3 -3
  89. data/app/controllers/apps/plugins_front_controller.rb +2 -2
  90. data/app/controllers/apps/themes_admin_controller.rb +2 -2
  91. data/app/controllers/apps/themes_front_controller.rb +2 -2
  92. data/app/controllers/camaleon_controller.rb +0 -1
  93. data/app/controllers/concerns/frontend_concern.rb +1 -2
  94. data/app/controllers/frontend_controller.rb +25 -9
  95. data/app/decorators/category_decorator.rb +0 -1
  96. data/app/decorators/custom_field_decorator.rb +0 -1
  97. data/app/decorators/custom_fields_concern.rb +9 -3
  98. data/app/decorators/post_comment_decorator.rb +0 -1
  99. data/app/decorators/post_decorator.rb +10 -4
  100. data/app/decorators/post_tag_decorator.rb +0 -1
  101. data/app/decorators/post_type_decorator.rb +0 -1
  102. data/app/decorators/site_decorator.rb +35 -11
  103. data/app/decorators/term_taxonomy_decorator.rb +1 -3
  104. data/app/decorators/theme_decorator.rb +0 -1
  105. data/app/decorators/user_decorator.rb +7 -5
  106. data/app/decorators/widget_decorator.rb +0 -1
  107. data/app/helpers/admin/application_helper.rb +14 -0
  108. data/app/helpers/admin/menus_helper.rb +8 -8
  109. data/app/helpers/camaleon_helper.rb +10 -3
  110. data/app/helpers/captcha_helper.rb +2 -2
  111. data/app/helpers/frontend/application_helper.rb +0 -1
  112. data/app/helpers/frontend/nav_menu_helper.rb +2 -1
  113. data/app/helpers/frontend/seo_helper.rb +1 -2
  114. data/app/helpers/frontend/site_helper.rb +4 -4
  115. data/app/helpers/hooks_helper.rb +2 -5
  116. data/app/helpers/html_helper.rb +9 -7
  117. data/app/helpers/plugins_helper.rb +34 -8
  118. data/app/helpers/session_helper.rb +1 -2
  119. data/app/helpers/short_code_helper.rb +91 -10
  120. data/app/helpers/site_helper.rb +17 -8
  121. data/app/helpers/theme_helper.rb +34 -7
  122. data/app/helpers/uploader_helper.rb +6 -2
  123. data/app/mailers/html_mailer.rb +15 -6
  124. data/app/models/category.rb +2 -1
  125. data/app/models/concerns/custom_fields_read.rb +14 -3
  126. data/app/models/concerns/metas.rb +7 -4
  127. data/app/models/custom_field_group.rb +3 -0
  128. data/app/models/{concerns/metas_saved.rb → grid_template.rb} +7 -2
  129. data/app/models/meta.rb +0 -1
  130. data/app/models/nav_menu.rb +15 -1
  131. data/app/models/nav_menu_item.rb +10 -0
  132. data/app/models/post.rb +100 -6
  133. data/app/models/post_comment.rb +6 -0
  134. data/app/models/post_default.rb +9 -8
  135. data/app/models/post_relationship.rb +2 -0
  136. data/app/models/post_type.rb +36 -24
  137. data/app/models/site.rb +7 -16
  138. data/app/models/term_taxonomy.rb +3 -2
  139. data/app/models/theme.rb +5 -0
  140. data/app/models/widget/assigned.rb +3 -2
  141. data/app/views/admin/appearances/nav_menus/_custom_fields.html.erb +6 -0
  142. data/app/views/admin/appearances/{_external_menu.html.erb → nav_menus/_external_menu.html.erb} +8 -10
  143. data/app/views/admin/appearances/nav_menus/_menu_form.html.erb +35 -0
  144. data/app/views/admin/appearances/nav_menus/_menu_list.html.erb +22 -0
  145. data/app/views/admin/appearances/nav_menus/index.html.erb +110 -0
  146. data/app/views/admin/appearances/themes/index.html.erb +4 -3
  147. data/app/views/admin/appearances/widgets/main/_sidebar.html.erb +29 -0
  148. data/app/views/admin/appearances/widgets/main/form.html.erb +1 -1
  149. data/app/views/admin/appearances/widgets/main/index.html.erb +19 -41
  150. data/app/views/admin/categories/edit.html.erb +2 -6
  151. data/app/views/admin/categories/index.html.erb +7 -11
  152. data/app/views/admin/comments/form.html.erb +4 -7
  153. data/app/views/admin/comments/index.html.erb +24 -41
  154. data/app/views/admin/comments/reply.html.erb +9 -10
  155. data/app/views/admin/grid_editor/form.html.erb +31 -0
  156. data/app/views/admin/grid_editor/index.html.erb +29 -0
  157. data/app/views/admin/media/index.html.erb +3 -15
  158. data/app/views/admin/plugins/_plugins_list.html.erb +1 -2
  159. data/app/views/admin/post_tags/edit.html.erb +2 -6
  160. data/app/views/admin/post_tags/index.html.erb +3 -8
  161. data/app/views/admin/posts/_sidebar.html.erb +136 -0
  162. data/app/views/admin/posts/form.html.erb +87 -281
  163. data/app/views/admin/posts/index.html.erb +89 -104
  164. data/app/views/admin/sessions/forgot.html.erb +7 -13
  165. data/app/views/admin/sessions/login.html.erb +21 -11
  166. data/app/views/admin/sessions/register.html.erb +3 -6
  167. data/app/views/admin/settings/custom_fields/_meta_data.html.erb +1 -1
  168. data/app/views/admin/settings/custom_fields/_render.html.erb +6 -14
  169. data/app/views/admin/settings/custom_fields/fields/audio.html.erb +1 -1
  170. data/app/views/admin/settings/custom_fields/fields/field_attrs.html.erb +3 -5
  171. data/app/views/admin/settings/custom_fields/fields/file.html.erb +1 -1
  172. data/app/views/admin/settings/custom_fields/fields/image.html.erb +1 -1
  173. data/app/views/admin/settings/custom_fields/fields/posts.html.erb +1 -1
  174. data/app/views/admin/settings/custom_fields/fields/select.html.erb +1 -1
  175. data/app/views/admin/settings/custom_fields/fields/users.html.erb +1 -1
  176. data/app/views/admin/settings/custom_fields/fields/video.html.erb +1 -1
  177. data/app/views/admin/settings/custom_fields/form.html.erb +11 -9
  178. data/app/views/admin/settings/custom_fields/get_items.html.erb +3 -6
  179. data/app/views/admin/settings/custom_fields/index.html.erb +3 -10
  180. data/app/views/admin/settings/languages.html.erb +2 -10
  181. data/app/views/admin/settings/post_types/_form.html.erb +1 -1
  182. data/app/views/admin/settings/post_types/edit.html.erb +2 -6
  183. data/app/views/admin/settings/post_types/index.html.erb +4 -12
  184. data/app/views/admin/settings/site.html.erb +143 -149
  185. data/app/views/admin/settings/sites/form.html.erb +4 -19
  186. data/app/views/admin/settings/sites/index.html.erb +8 -9
  187. data/app/views/admin/taxonomy/index.html.erb +1 -1
  188. data/app/views/admin/user_roles/form.html.erb +2 -3
  189. data/app/views/admin/user_roles/index.html.erb +2 -8
  190. data/app/views/admin/users/form.html.erb +14 -9
  191. data/app/views/admin/users/index.html.erb +3 -8
  192. data/app/views/admin/users/profile_edit.html.erb +21 -14
  193. data/app/views/default_theme/custom_fields/audio.html.erb +3 -0
  194. data/app/views/default_theme/custom_fields/checkbox.html.erb +3 -0
  195. data/app/views/default_theme/custom_fields/checkboxes.html.erb +3 -0
  196. data/app/views/default_theme/custom_fields/colorpicker.html.erb +3 -0
  197. data/app/views/default_theme/custom_fields/date.html.erb +3 -0
  198. data/app/views/default_theme/custom_fields/editor.html.erb +3 -0
  199. data/app/views/default_theme/custom_fields/email.html.erb +3 -0
  200. data/app/views/default_theme/custom_fields/field_attrs.html.erb +3 -0
  201. data/app/views/default_theme/custom_fields/file.html.erb +3 -0
  202. data/app/views/default_theme/custom_fields/image.html.erb +3 -0
  203. data/app/views/default_theme/custom_fields/numeric.html.erb +3 -0
  204. data/app/views/default_theme/custom_fields/phone.html.erb +3 -0
  205. data/app/views/default_theme/custom_fields/posts.html.erb +3 -0
  206. data/app/views/default_theme/custom_fields/radio.html.erb +3 -0
  207. data/app/views/default_theme/custom_fields/select.html.erb +3 -0
  208. data/app/views/default_theme/custom_fields/select_eval.html.erb +3 -0
  209. data/app/views/default_theme/custom_fields/text_area.html.erb +3 -0
  210. data/app/views/default_theme/custom_fields/text_box.html.erb +3 -0
  211. data/app/views/default_theme/custom_fields/url.html.erb +3 -0
  212. data/app/views/default_theme/custom_fields/users.html.erb +3 -0
  213. data/app/views/default_theme/custom_fields/video.html.erb +3 -0
  214. data/app/views/default_theme/layouts/index.html.erb +2 -2
  215. data/app/views/default_theme/{post.html.erb → single.html.erb} +1 -1
  216. data/app/views/default_theme/{post.rss.builder → single.rss.builder} +0 -0
  217. data/app/views/layouts/admin.html.erb +35 -133
  218. data/app/views/layouts/admin/_flash_messages.html.erb +1 -15
  219. data/app/views/layouts/admin/_footer.html.erb +6 -0
  220. data/app/views/layouts/admin/_header.html.erb +51 -0
  221. data/app/views/layouts/admin/_sidebar.html.erb +21 -30
  222. data/app/views/layouts/admin/installer.html.erb +2 -2
  223. data/app/views/layouts/login.html.erb +15 -33
  224. data/config/initializers/active_record_extension.rb +14 -2
  225. data/config/initializers/assets.rb +21 -7
  226. data/config/initializers/page_caching.rb +1 -2
  227. data/config/locales/admin/en.yml +17 -9
  228. data/config/locales/admin/es.yml +8 -3
  229. data/config/locales/admin/it.yml +4 -2
  230. data/config/locales/admin/js.yml +147 -0
  231. data/config/routes/admin.rb +4 -4
  232. data/config/routes/frontend.rb +2 -2
  233. data/config/system.json +1 -0
  234. data/db/migrate/20150926095310_rename_column_posts.rb +18 -0
  235. data/lib/camaleon_cms.rb +1 -1
  236. data/lib/camaleon_cms/engine.rb +17 -2
  237. data/lib/camaleon_cms/version.rb +1 -1
  238. data/lib/generators/camaleon_cms/gem_plugin_generator.rb +122 -0
  239. data/lib/generators/camaleon_cms/gem_plugin_template/app/controllers/plugins/my_plugin/admin_controller.rb +8 -0
  240. data/lib/generators/camaleon_cms/gem_plugin_template/app/controllers/plugins/my_plugin/front_controller.rb +8 -0
  241. data/lib/generators/camaleon_cms/gem_plugin_template/app/helpers/plugins/my_plugin/main_helper.rb +22 -0
  242. data/lib/generators/camaleon_cms/gem_plugin_template/app/models/plugins/my_plugin/my_plugin.rb +12 -0
  243. data/lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/admin/index.html.erb +2 -0
  244. data/lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/front/index.html.erb +2 -0
  245. data/lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/layouts/readme.txt +2 -0
  246. data/lib/generators/camaleon_cms/gem_plugin_template/config/camaleon_plugin.json +21 -0
  247. data/lib/generators/camaleon_cms/install_generator.rb +1 -2
  248. data/lib/generators/camaleon_cms/install_template/plugin_routes.rb +1 -10
  249. data/lib/generators/ctheme_template/app/apps/themes/my_theme/config/config.json +5 -5
  250. data/lib/generators/ctheme_template/app/apps/themes/my_theme/main_helper.rb +6 -5
  251. data/lib/generators/ctheme_template/app/apps/themes/my_theme/views/layouts/index.html.erb +2 -2
  252. data/lib/plugin_routes.rb +40 -2
  253. metadata +257 -22
  254. data/app/assets/stylesheets/admin/animate/animate.min.css +0 -6
  255. data/app/assets/stylesheets/admin/bootstrap/bootstrap-datetimepicker.css.scss +0 -339
  256. data/app/assets/stylesheets/admin/bootstrap/bootstrap.min.css +0 -5
  257. data/app/assets/stylesheets/admin/core.scss +0 -349
  258. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.eot +0 -0
  259. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.svg +0 -1831
  260. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.ttf +0 -0
  261. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.woff +0 -0
  262. data/app/assets/stylesheets/admin/nav-menu.css +0 -54
  263. data/app/assets/stylesheets/admin/theme-default.scss +0 -8462
  264. data/app/models/concerns/site_public.rb +0 -23
  265. data/app/views/admin/appearances/menu.html.erb +0 -199
  266. data/lib/Gemfile +0 -25
@@ -9,7 +9,6 @@
9
9
  class Admin::UsersController < AdminController
10
10
  before_action :validate_role, except: [:profile, :profile_edit]
11
11
  before_action :set_user, only: ['show','edit','update','destroy']
12
- #http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show]
13
12
 
14
13
  def index
15
14
  @users = current_site.users.paginate(:page => params[:page], :per_page => current_site.admin_per_page)
@@ -104,17 +103,17 @@ class Admin::UsersController < AdminController
104
103
  end
105
104
 
106
105
  private
106
+
107
107
  def validate_role
108
108
  authorize! :manager, :users
109
109
  end
110
- def set_user
111
- begin
112
- @user = current_site.users.find(params[:id])
113
- rescue
114
- flash[:error] = t('admin.users.message.error')
115
- redirect_to admin_path
116
- end
117
110
 
111
+ def set_user
112
+ begin
113
+ @user = current_site.users.find(params[:id])
114
+ rescue
115
+ flash[:error] = t('admin.users.message.error')
116
+ redirect_to admin_path
117
+ end
118
118
  end
119
-
120
119
  end
@@ -19,15 +19,15 @@ class AdminController < CamaleonController
19
19
  before_action :admin_logged_actions
20
20
  before_action :admin_before_hooks
21
21
  after_action :admin_after_hooks
22
+ # layout Proc.new { |controller| request.headers["X-XHR-Referer"] ? "admin/_ajax" : 'admin' }
22
23
 
23
- # render admin dashabord
24
+ # render admin dashboard
24
25
  def index
25
-
26
26
  end
27
27
 
28
28
  # render admin dashboard
29
29
  def dashboard
30
- render "admin/dashboard/index"
30
+ render "admin/dashboard/index"
31
31
  end
32
32
 
33
33
  private
@@ -53,5 +53,4 @@ class AdminController < CamaleonController
53
53
  def admin_logged_actions
54
54
  admin_menus_add_commons unless request.xhr?
55
55
  end
56
-
57
- end
56
+ end
@@ -10,11 +10,11 @@ class Apps::PluginsAdminController < AdminController
10
10
  before_action :init_plugin
11
11
 
12
12
  private
13
+
13
14
  def init_plugin
14
15
  plugin_name = params[:controller].split("/")[1]
15
16
  @plugin = current_site.plugins.where(slug: plugin_name).first
16
17
  return render_error(404) unless @plugin.active?
17
- lookup_context.prefixes.prepend(params[:controller].sub("plugins/#{plugin_name}", "#{plugin_name}/views"))
18
+ lookup_context.prefixes.prepend(params[:controller].sub("plugins/#{plugin_name}", "#{plugin_name}/views")) if !@plugin.settings["gem_mode"].present?
18
19
  end
19
-
20
- end
20
+ end
@@ -10,11 +10,11 @@ class Apps::PluginsFrontController < FrontendController
10
10
  before_action :init_plugin
11
11
 
12
12
  private
13
+
13
14
  def init_plugin
14
15
  plugin_name = params[:controller].split("/")[1]
15
16
  @plugin = current_site.plugins.where(slug: plugin_name).first
16
17
  return render_error(404) unless @plugin.active?
17
18
  lookup_context.prefixes.prepend(params[:controller].sub("plugins/#{plugin_name}", "#{plugin_name}/views"))
18
19
  end
19
-
20
- end
20
+ end
@@ -10,11 +10,11 @@ class Apps::ThemesAdminController < AdminController
10
10
  before_action :init_theme
11
11
 
12
12
  private
13
+
13
14
  def init_theme
14
15
  theme_name = params[:controller].split("/")[1]
15
16
  @theme = current_theme
16
17
  return render_error(404) unless current_theme.slug == theme_name
17
18
  lookup_context.prefixes.prepend(params[:controller].sub("themes/#{theme_name}", "#{theme_name}/views"))
18
19
  end
19
-
20
- end
20
+ end
@@ -10,11 +10,11 @@ class Apps::ThemesFrontController < FrontendController
10
10
  before_action :init_theme
11
11
 
12
12
  private
13
+
13
14
  def init_theme
14
15
  theme_name = params[:controller].split("/")[1]
15
16
  @theme = current_theme
16
17
  return render_error(404) unless current_theme.slug == theme_name
17
18
  lookup_context.prefixes.prepend(params[:controller].sub("themes/#{theme_name}", "#{theme_name}/views"))
18
19
  end
19
-
20
- end
20
+ end
@@ -106,5 +106,4 @@ class CamaleonController < ApplicationController
106
106
  end
107
107
  end
108
108
  end
109
-
110
109
  end
@@ -58,5 +58,4 @@ module FrontendConcern extend ActiveSupport::Concern
58
58
  redirect_to :back
59
59
  end
60
60
  end
61
-
62
- end
61
+ end
@@ -41,7 +41,12 @@ class FrontendController < CamaleonController
41
41
  init_seo(@category)
42
42
  @children = @category.children.no_empty.decorate
43
43
  @posts = @category.the_posts.paginate(:page => params[:page], :per_page => current_site.front_per_page).eager_load(:metas)
44
- r = {category: @category, layout: (self.send :_layout), render: "category"}; hooks_run("on_render_category", r)
44
+ if lookup_context.template_exists?(@category.the_slug, "categories")
45
+ r_file = "categories/#{@category.the_slug}"
46
+ else
47
+ r_file = "category"
48
+ end
49
+ r = {category: @category, layout: (self.send :_layout), render: r_file}; hooks_run("on_render_category", r)
45
50
  render r[:render], layout: r[:layout]
46
51
  end
47
52
 
@@ -56,7 +61,12 @@ class FrontendController < CamaleonController
56
61
  @posts = @post_type.the_posts.paginate(:page => params[:page], :per_page => current_site.front_per_page).eager_load(:metas)
57
62
  @categories = @post_type.categories.no_empty.eager_load(:metas).decorate
58
63
  @post_tags = @post_type.post_tags.eager_load(:metas)
59
- r = {post_type: @post_type, layout: (self.send :_layout), render: "post_type"}; hooks_run("on_render_post_type", r)
64
+ if lookup_context.template_exists?(@post_type.the_slug, "post_types")
65
+ r_file = "post_types/#{@post_type.the_slug}"
66
+ else
67
+ r_file = "post_type"
68
+ end
69
+ r = {post_type: @post_type, layout: (self.send :_layout), render: r_file}; hooks_run("on_render_post_type", r)
60
70
  render r[:render], layout: r[:layout]
61
71
  end
62
72
 
@@ -70,7 +80,12 @@ class FrontendController < CamaleonController
70
80
  end
71
81
  init_seo(@post_tag)
72
82
  @posts = @post_tag.the_posts.paginate(:page => params[:page], :per_page => current_site.front_per_page).eager_load(:metas)
73
- r = {post_tag: @post_tag, layout: (self.send :_layout), render: "post_tag"}; hooks_run("on_render_post_tag", r)
83
+ if lookup_context.template_exists?(@post_tag.the_slug, "post_tags")
84
+ r_file = "post_tags/#{@post_tag.the_slug}"
85
+ else
86
+ r_file = "post_tag"
87
+ end
88
+ r = {post_tag: @post_tag, layout: (self.send :_layout), render: r_file}; hooks_run("on_render_post_tag", r)
74
89
  render r[:render], layout: r[:layout]
75
90
  end
76
91
 
@@ -148,6 +163,7 @@ class FrontendController < CamaleonController
148
163
  @post_type = @post.the_post_type
149
164
  @comments = @post.the_comments
150
165
  @categories = @post.the_categories
166
+ @post.increment_visits!
151
167
  home_page = @_site_options[:home_page] rescue nil
152
168
  r_file = ""
153
169
  if lookup_context.template_exists?("page_#{@post.id}")
@@ -158,13 +174,14 @@ class FrontendController < CamaleonController
158
174
  r_file = "index"
159
175
  elsif lookup_context.template_exists?("#{@post_type.slug}")
160
176
  r_file = "#{@post_type.slug}"
161
- elsif lookup_context.template_exists?("single")
162
- r_file = "single"
163
177
  else
164
- r_file = "post"
178
+ r_file = "single"
165
179
  end
166
180
 
167
- r = {post: @post, post_type: @post_type, layout: (self.send :_layout), render: r_file}
181
+ layout_ = self.send :_layout
182
+ meta_layout = @post.get_meta("layout")
183
+ layout_ = meta_layout if meta_layout.present? && lookup_context.template_exists?("layouts/#{meta_layout}")
184
+ r = {post: @post, post_type: @post_type, layout: layout_, render: r_file}
168
185
  hooks_run("on_render_post", r) if from_url
169
186
  render r[:render], layout: r[:layout]
170
187
  end
@@ -228,5 +245,4 @@ class FrontendController < CamaleonController
228
245
  options
229
246
  end
230
247
  end
231
-
232
- end
248
+ end
@@ -57,5 +57,4 @@ class CategoryDecorator < TermTaxonomyDecorator
57
57
  def the_post_type
58
58
  object.post_type.decorate
59
59
  end
60
-
61
60
  end
@@ -27,5 +27,4 @@ class CustomFieldDecorator < Draper::Decorator
27
27
  def cache_prefix(key = "")
28
28
  "#{h.current_site.cache_prefix}/cfield#{object.id}#{"/#{key}" if key.present?}"
29
29
  end
30
-
31
30
  end
@@ -16,8 +16,14 @@ module CustomFieldsConcern
16
16
 
17
17
  # return custom field content with key field_key
18
18
  # translated and short codes evaluated like the content
19
- def the_field(field_key)
20
- h.do_shortcode(object.get_field_value(field_key).to_s.translate(@_deco_locale), object)
19
+ # default_val: default value returned when this field was not registered
20
+ def the_field(field_key, default_val = '')
21
+ h.do_shortcode(object.get_field(field_key, default_val).to_s.translate(@_deco_locale), object)
22
+ end
23
+
24
+ # the same as the_field(..), but this return default value if there is not present
25
+ def the_field!(field_key, default_val = '')
26
+ h.do_shortcode(object.get_field!(field_key, default_val).to_s.translate(@_deco_locale), object)
21
27
  end
22
28
 
23
29
  # return custom field contents with key field_key
@@ -25,7 +31,7 @@ module CustomFieldsConcern
25
31
  # this is for multiple values
26
32
  def the_fields(field_key)
27
33
  r = []
28
- object.get_field_values(field_key).each do |text|
34
+ object.get_fields(field_key).each do |text|
29
35
  r << h.do_shortcode(text.to_s.translate(@_deco_locale), object)
30
36
  end
31
37
  r
@@ -22,5 +22,4 @@ class PostCommentDecorator < Draper::Decorator
22
22
  def the_content
23
23
  object.content
24
24
  end
25
-
26
25
  end
@@ -20,7 +20,8 @@ class PostDecorator < ApplicationDecorator
20
20
  # return the excerpt of this post
21
21
  def the_excerpt(qty_chars = 200)
22
22
  excerpt = object.meta[:summary].to_s.translate(get_locale)
23
- r = {content: (excerpt.present? ? excerpt : object.content.to_s.translate(get_locale).strip_tags.gsub(/&#13;|\n/, " ").truncate(qty_chars)), post: object}
23
+ # r = {content: (excerpt.present? ? excerpt : object.content_filtered.to_s.translate(get_locale).strip_tags.gsub(/&#13;|\n/, " ").truncate(qty_chars)), post: object}
24
+ r = {content: (excerpt.present? ? excerpt : h.cama_strip_shortcodes(object.content_filtered.to_s.translate(get_locale).strip_tags.gsub(/&#13;|\n/, " ").truncate(qty_chars))), post: object}
24
25
  h.hooks_run("post_the_excerpt", r)
25
26
  r[:content]
26
27
  end
@@ -76,8 +77,9 @@ class PostDecorator < ApplicationDecorator
76
77
  # return html link
77
78
  # attrs: Hash of link tag attributes, sample: {id: "myid", class: "sss" }
78
79
  def the_edit_link(title = nil, attrs = { })
80
+ return '' unless h.current_user.present?
79
81
  attrs = {target: "_blank", style: "font-size:11px !important;cursor:pointer;"}.merge(attrs)
80
- h.link_to("&rarr; #{title || h.ct("edit")}", the_edit_url, *attrs)
82
+ h.link_to("&rarr; #{title || h.ct("edit")}".html_safe, the_edit_url, attrs)
81
83
  end
82
84
 
83
85
  # show thumbnail image as html
@@ -115,6 +117,11 @@ class PostDecorator < ApplicationDecorator
115
117
  "<span class='label label-#{color} label-form'>#{status.titleize}</span>"
116
118
  end
117
119
 
120
+ # return the user object who created this post
121
+ def the_author
122
+ object.author.decorate
123
+ end
124
+
118
125
  # return all categories assigned for this post filtered by permissions + hidden posts + roles + etc...
119
126
  def the_categories
120
127
  object.categories
@@ -139,7 +146,7 @@ class PostDecorator < ApplicationDecorator
139
146
 
140
147
  # check if the post can be commented
141
148
  def can_commented?
142
- object.meta[:has_comments].to_s.to_bool rescue false
149
+ object.manage_comments?
143
150
  end
144
151
 
145
152
 
@@ -166,5 +173,4 @@ class PostDecorator < ApplicationDecorator
166
173
  def cache_prefix(key = "")
167
174
  "#{h.current_site.cache_prefix}/post#{object.id}#{"/#{key}" if key.present?}"
168
175
  end
169
-
170
176
  end
@@ -32,5 +32,4 @@ class PostTagDecorator < TermTaxonomyDecorator
32
32
  object.post_type.decorate.generate_breadcrumb(add_post_type, true)
33
33
  h.breadcrumb_add(self.the_title)
34
34
  end
35
-
36
35
  end
@@ -52,5 +52,4 @@ class PostTypeDecorator < TermTaxonomyDecorator
52
52
  th = object.get_option("thumb")
53
53
  th.present? ? th : (default || h.asset_url("image-not-found.png"))
54
54
  end
55
-
56
55
  end
@@ -24,7 +24,7 @@ class SiteDecorator < TermTaxonomyDecorator
24
24
  end
25
25
 
26
26
  # return all contents from this site registered for post_type = slug (filter visibility, hidden, expired, ...)
27
- # slug_or_id: slug or id of the post_type or array of slugs, default 'post'
27
+ # slug_or_id: slug or id of the post_type or array of slugs of post_types, default 'post'
28
28
  def the_contents(slug_or_id = "post")
29
29
  return h.verify_front_visibility(object.posts.where("term_taxonomy.id = ?", slug_or_id)) if slug_or_id.is_a?(Integer)
30
30
  return h.verify_front_visibility(object.posts.where("term_taxonomy.slug = ?", slug_or_id)) if slug_or_id.is_a?(String)
@@ -42,12 +42,31 @@ class SiteDecorator < TermTaxonomyDecorator
42
42
  end
43
43
  end
44
44
 
45
- # return all main_categories for ths site
46
- def the_categories
47
- object.categories
45
+ # return the post with id or slug equal to slug_or_id
46
+ # slug_or_id: (String) for post slug
47
+ # slug_or_id: (Integer) for post id
48
+ # slug_or_id: (Array) array of post ids, return multiple posts
49
+ # return post model or nil
50
+ def the_post(slug_or_id)
51
+ post = self.the_posts.find(slug_or_id) rescue nil if slug_or_id.is_a?(Integer) # id
52
+ post = self.the_posts.find(slug_or_id) rescue nil if slug_or_id.is_a?(Array) # id
53
+ post = self.the_posts.find_by_slug(slug_or_id) if slug_or_id.is_a?(String) # id
54
+ post.present? ? post.decorate : nil
48
55
  end
49
56
 
50
- # return the category with id or slug from this site
57
+ # return a collection of categories
58
+ # Arguments:
59
+ # slug_or_id: string or integer
60
+ # return:
61
+ # slug_or_id: nil => return all main_categories for this site
62
+ # slug_or_id: integer => return all main categories of the post_type with id = slug_or_id
63
+ # slug_or_id: string => return all main categories of the post_type with slug = slug_or_id
64
+ def the_categories(slug_or_id = nil)
65
+ return the_post_type(slug_or_id).the_categories if slug_or_id.present?
66
+ return object.categories unless slug_or_id.present?
67
+ end
68
+
69
+ # return the category object with id or slug = slug_or_id from this site
51
70
  def the_category(slug_or_id)
52
71
  return the_full_categories.where(id: slug_or_id).first if slug_or_id.is_a?(Integer)
53
72
  return the_full_categories.find_by_slug(slug_or_id) if slug_or_id.is_a?(String)
@@ -63,14 +82,21 @@ class SiteDecorator < TermTaxonomyDecorator
63
82
  object.post_tags
64
83
  end
65
84
 
66
- # return all post types for ths site
85
+ # return all post types for this site
67
86
  def the_post_types
68
87
  object.post_types.eager_load(:metas)
69
88
  end
70
89
 
71
- # return the post type with slug = slug
72
- def the_post_type(slug)
73
- object.post_types.find_by_slug(slug).decorate rescue nil
90
+ # return a post_type object with id or slug = slug_or_id
91
+ # Arguments:
92
+ # slug_or_id: string or integer
93
+ # return:
94
+ # slug_or_id: nil => return all main_categories for this site
95
+ # slug_or_id: integer => return all main categories of the post_type with id = slug_or_id
96
+ # slug_or_id: string => return all main categories of the post_type with slug = slug_or_id
97
+ def the_post_type(slug_or_id)
98
+ return object.post_types.find_by_slug(slug_or_id).decorate rescue nil if slug_or_id.is_a?(String)
99
+ return object.post_types.find(slug_or_id).decorate rescue nil if slug_or_id.is_a?(Integer)
74
100
  end
75
101
 
76
102
  # draw languages configured for this site
@@ -132,6 +158,4 @@ class SiteDecorator < TermTaxonomyDecorator
132
158
  def manage_sites?
133
159
  self.main_site? && h.current_user.admin?
134
160
  end
135
-
136
-
137
161
  end
@@ -22,7 +22,6 @@ class TermTaxonomyDecorator < ApplicationDecorator
22
22
  object.slug.translate(get_locale)
23
23
  end
24
24
 
25
-
26
25
  # return the content for current locale + shortcodes executed
27
26
  def the_content
28
27
  r = {content: object.description.to_s.translate(get_locale), object: object}
@@ -82,7 +81,7 @@ class TermTaxonomyDecorator < ApplicationDecorator
82
81
  # attrs: Hash of link tag attributes, sample: {id: "myid", class: "sss" }
83
82
  def the_edit_link(title = nil, attrs = { })
84
83
  attrs = {target: "_blank", style: "font-size:11px !important;cursor:pointer;"}.merge(attrs)
85
- h.link_to("&rarr; #{title || h.ct("edit")}", the_edit_url, *attrs)
84
+ h.link_to("&rarr; #{title || h.ct("edit")}".html_safe, the_edit_url, attrs)
86
85
  end
87
86
 
88
87
  # cache identifier, the format is: [current-site-prefix]/[object-id]-[object-last_updated]/[current locale]
@@ -101,5 +100,4 @@ class TermTaxonomyDecorator < ApplicationDecorator
101
100
  end
102
101
  res
103
102
  end
104
-
105
103
  end
@@ -12,5 +12,4 @@ class ThemeDecorator < TermTaxonomyDecorator
12
12
  def the_id
13
13
  object.id
14
14
  end
15
-
16
15
  end
@@ -12,10 +12,9 @@ class UserDecorator < ApplicationDecorator
12
12
 
13
13
  # return the identifier
14
14
  def the_username
15
- "#{object.username}"
15
+ object.username
16
16
  end
17
17
 
18
-
19
18
  # return the fullname
20
19
  def the_name
21
20
  object.fullname
@@ -28,7 +27,12 @@ class UserDecorator < ApplicationDecorator
28
27
 
29
28
  # return the avatar for this user, default: assets/admin/img/no_image.jpg
30
29
  def the_avatar
31
- object.meta[:avatar].present? ? object.meta[:avatar] : h.asset_url("admin/img/no_image.jpg")
30
+ avatar_exists = File.exist? h.url_to_file_path(object.meta[:avatar])
31
+ if object.meta[:avatar].present? && avatar_exists
32
+ object.meta[:avatar]
33
+ else
34
+ h.asset_url("admin/img/no_image.jpg")
35
+ end
32
36
  end
33
37
 
34
38
  # return the slogan for this user, default: Hello World
@@ -62,6 +66,4 @@ class UserDecorator < ApplicationDecorator
62
66
  def cache_prefix(key = "")
63
67
  "#{h.current_site.cache_prefix}/user#{object.id}#{"/#{key}" if key.present?}"
64
68
  end
65
-
66
-
67
69
  end