camaleon_cms_rails6 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +202 -0
- data/Rakefile +32 -0
- data/app/apps/plugins/attack/admin_controller.rb +17 -0
- data/app/apps/plugins/attack/attack_helper.rb +94 -0
- data/app/apps/plugins/attack/config/config.json +31 -0
- data/app/apps/plugins/attack/config/custom_models.rb +8 -0
- data/app/apps/plugins/attack/config/locales/readme.txt +1 -0
- data/app/apps/plugins/attack/config/locales/translation.yml +129 -0
- data/app/apps/plugins/attack/config/routes_admin.txt +2 -0
- data/app/apps/plugins/attack/models/attack.rb +3 -0
- data/app/apps/plugins/attack/views/admin/settings.html.erb +49 -0
- data/app/apps/plugins/authoring_post/authoring_post_helper.rb +51 -0
- data/app/apps/plugins/authoring_post/config/config.json +24 -0
- data/app/apps/plugins/front_cache/admin_controller.rb +29 -0
- data/app/apps/plugins/front_cache/config/config.json +21 -0
- data/app/apps/plugins/front_cache/config/initializer.rb +7 -0
- data/app/apps/plugins/front_cache/config/locales/readme.txt +1 -0
- data/app/apps/plugins/front_cache/config/locales/translation.yml +149 -0
- data/app/apps/plugins/front_cache/config/routes_admin.txt +3 -0
- data/app/apps/plugins/front_cache/front_cache_helper.rb +137 -0
- data/app/apps/plugins/front_cache/views/admin/settings.html.erb +81 -0
- data/app/apps/plugins/visibility_post/assets/js/form.js +30 -0
- data/app/apps/plugins/visibility_post/config/config.json +24 -0
- data/app/apps/plugins/visibility_post/visibility_post_helper.rb +124 -0
- data/app/apps/themes/camaleon_first/assets/css/magnific-ver.css +394 -0
- data/app/apps/themes/camaleon_first/assets/css/main.css +16 -0
- data/app/apps/themes/camaleon_first/assets/css/style-ver.css.scss +251 -0
- data/app/apps/themes/camaleon_first/assets/css/wpbase.css +1 -0
- data/app/apps/themes/camaleon_first/assets/images/empe.jpg +0 -0
- data/app/apps/themes/camaleon_first/assets/images/image.png +0 -0
- data/app/apps/themes/camaleon_first/assets/images/loader.gif +0 -0
- data/app/apps/themes/camaleon_first/assets/images/zoom.png +0 -0
- data/app/apps/themes/camaleon_first/assets/js/hover.zoom.js +67 -0
- data/app/apps/themes/camaleon_first/assets/js/magnific.min.js +3 -0
- data/app/apps/themes/camaleon_first/assets/js/main-ver.js +46 -0
- data/app/apps/themes/camaleon_first/assets/js/main.js +18 -0
- data/app/apps/themes/camaleon_first/assets/js/modernizr.custom.js +4 -0
- data/app/apps/themes/camaleon_first/config/config.json +14 -0
- data/app/apps/themes/camaleon_first/main_helper.rb +33 -0
- data/app/apps/themes/camaleon_first/views/index.html.erb +28 -0
- data/app/apps/themes/camaleon_first/views/layouts/camaleon_cms/mailer.html.erb +22 -0
- data/app/apps/themes/camaleon_first/views/layouts/index.html.erb +84 -0
- data/app/apps/themes/camaleon_first/views/mailer.html.erb +4 -0
- data/app/apps/themes/camaleon_first/views/partials/readme.txt +1 -0
- data/app/apps/themes/camaleon_first/views/template_sample_page.html.erb +6 -0
- data/app/apps/themes/default/assets/css/main.css +13 -0
- data/app/apps/themes/default/assets/css/style.css.scss +3398 -0
- data/app/apps/themes/default/assets/css/styles.css.scss +175 -0
- data/app/apps/themes/default/assets/genericons/COPYING.txt +9 -0
- data/app/apps/themes/default/assets/genericons/Genericons-Regular.otf +0 -0
- data/app/apps/themes/default/assets/genericons/LICENSE.txt +339 -0
- data/app/apps/themes/default/assets/genericons/README.txt +123 -0
- data/app/apps/themes/default/assets/genericons/font/genericons-regular-webfont.eot +0 -0
- data/app/apps/themes/default/assets/genericons/font/genericons-regular-webfont.svg +135 -0
- data/app/apps/themes/default/assets/genericons/font/genericons-regular-webfont.ttf +0 -0
- data/app/apps/themes/default/assets/genericons/font/genericons-regular-webfont.woff +0 -0
- data/app/apps/themes/default/assets/genericons/genericons.css +197 -0
- data/app/apps/themes/default/assets/images/circle.png +0 -0
- data/app/apps/themes/default/assets/images/dotted-line-2x.png +0 -0
- data/app/apps/themes/default/assets/images/dotted-line-light-2x.png +0 -0
- data/app/apps/themes/default/assets/images/dotted-line-light.png +0 -0
- data/app/apps/themes/default/assets/images/dotted-line.png +0 -0
- data/app/apps/themes/default/assets/images/headers/circle-thumbnail.png +0 -0
- data/app/apps/themes/default/assets/images/headers/circle.png +0 -0
- data/app/apps/themes/default/assets/images/headers/diamond-thumbnail.png +0 -0
- data/app/apps/themes/default/assets/images/headers/diamond.png +0 -0
- data/app/apps/themes/default/assets/images/headers/star-thumbnail.png +0 -0
- data/app/apps/themes/default/assets/images/headers/star.png +0 -0
- data/app/apps/themes/default/assets/images/image.png +0 -0
- data/app/apps/themes/default/assets/images/search-icon-2x.png +0 -0
- data/app/apps/themes/default/assets/images/search-icon.png +0 -0
- data/app/apps/themes/default/assets/js/main.js +13 -0
- data/app/apps/themes/default/config/config.json +19 -0
- data/app/apps/themes/default/default_helper.rb +28 -0
- data/app/apps/themes/default/views/admin/settings.html.erb +0 -0
- data/app/apps/themes/default/views/category.html.erb +16 -0
- data/app/apps/themes/default/views/index.html.erb +35 -0
- data/app/apps/themes/default/views/layouts/index.html.erb +84 -0
- data/app/apps/themes/default/views/page.html.erb +14 -0
- data/app/apps/themes/default/views/partials/_breadcrumb.html.erb +10 -0
- data/app/apps/themes/default/views/partials/_categories_list.html.erb +23 -0
- data/app/apps/themes/default/views/partials/_comments.html.erb +40 -0
- data/app/apps/themes/default/views/partials/_comments_list.html.erb +20 -0
- data/app/apps/themes/default/views/partials/_flash_messages.html.erb +26 -0
- data/app/apps/themes/default/views/partials/_forms.html.erb +19 -0
- data/app/apps/themes/default/views/partials/_post_list_item.html.erb +34 -0
- data/app/apps/themes/default/views/partials/_search_form.html.erb +8 -0
- data/app/apps/themes/default/views/partials/_sidebar.html.erb +50 -0
- data/app/apps/themes/default/views/post.html.erb +14 -0
- data/app/apps/themes/default/views/post_tag.html.erb +14 -0
- data/app/apps/themes/default/views/post_type.html.erb +33 -0
- data/app/apps/themes/default/views/search.html.erb +17 -0
- data/app/apps/themes/new/assets/css/main.css +14 -0
- data/app/apps/themes/new/assets/css/styles.css.scss +175 -0
- data/app/apps/themes/new/assets/images/image.png +0 -0
- data/app/apps/themes/new/assets/js/main.js +14 -0
- data/app/apps/themes/new/config/config.json +26 -0
- data/app/apps/themes/new/custom_helper.rb +31 -0
- data/app/apps/themes/new/image.png +0 -0
- data/app/apps/themes/new/views/admin/settings.html.erb +1 -0
- data/app/apps/themes/new/views/category.html.erb +33 -0
- data/app/apps/themes/new/views/index.html.erb +71 -0
- data/app/apps/themes/new/views/layouts/_footer.html.erb +17 -0
- data/app/apps/themes/new/views/layouts/_header.html.erb +38 -0
- data/app/apps/themes/new/views/layouts/index.html.erb +32 -0
- data/app/apps/themes/new/views/page.html.erb +16 -0
- data/app/apps/themes/new/views/post.html.erb +20 -0
- data/app/apps/themes/new/views/post_tag.html.erb +22 -0
- data/app/apps/themes/new/views/post_type.html.erb +33 -0
- data/app/apps/themes/new/views/search.html.erb +18 -0
- data/app/assets/config/camaleon-cms.js +7 -0
- data/app/assets/fonts/camaleon_cms/glyphicons-halflings-regular.eot +0 -0
- data/app/assets/fonts/camaleon_cms/glyphicons-halflings-regular.svg +288 -0
- data/app/assets/fonts/camaleon_cms/glyphicons-halflings-regular.ttf +0 -0
- data/app/assets/fonts/camaleon_cms/glyphicons-halflings-regular.woff +0 -0
- data/app/assets/fonts/camaleon_cms/glyphicons-halflings-regular.woff2 +0 -0
- data/app/assets/images/camaleon.png +0 -0
- data/app/assets/images/camaleon_cms/admin/admin_spinner.gif +0 -0
- data/app/assets/images/camaleon_cms/admin/glyphicons-halflings.png +0 -0
- data/app/assets/images/camaleon_cms/admin/intro/menus.png +0 -0
- data/app/assets/images/camaleon_cms/admin/no_image.jpg +0 -0
- data/app/assets/images/camaleon_cms/bg-tree.jpeg +0 -0
- data/app/assets/images/camaleon_cms/camaleon-dark.png +0 -0
- data/app/assets/images/camaleon_cms/camaleon.png +0 -0
- data/app/assets/images/camaleon_cms/category-icon.png +0 -0
- data/app/assets/images/camaleon_cms/favicon.ico +0 -0
- data/app/assets/images/camaleon_cms/image-not-found.png +0 -0
- data/app/assets/images/camaleon_cms/language/de.png +0 -0
- data/app/assets/images/camaleon_cms/language/en.png +0 -0
- data/app/assets/images/camaleon_cms/language/es.png +0 -0
- data/app/assets/images/camaleon_cms/language/fr.png +0 -0
- data/app/assets/images/camaleon_cms/language/it.png +0 -0
- data/app/assets/images/camaleon_cms/language/nl.png +0 -0
- data/app/assets/images/camaleon_cms/language/pl.png +0 -0
- data/app/assets/images/camaleon_cms/language/pt-BR.png +0 -0
- data/app/assets/images/camaleon_cms/language/pt.png +0 -0
- data/app/assets/images/camaleon_cms/language/ru.png +0 -0
- data/app/assets/images/camaleon_cms/language/uk.png +0 -0
- data/app/assets/images/camaleon_cms/language/zh-CN.png +0 -0
- data/app/assets/images/camaleon_cms/loader.gif +0 -0
- data/app/assets/images/camaleon_cms/users/no-image.jpg +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/_actions.js +91 -0
- data/app/assets/javascripts/camaleon_cms/admin/_bootstrap-datepicker.js +2558 -0
- data/app/assets/javascripts/camaleon_cms/admin/_bootstrap-select.js +7 -0
- data/app/assets/javascripts/camaleon_cms/admin/_custom_fields.js +273 -0
- data/app/assets/javascripts/camaleon_cms/admin/_data.js +69 -0
- data/app/assets/javascripts/camaleon_cms/admin/_i18n.js +32 -0
- data/app/assets/javascripts/camaleon_cms/admin/_jquery-ui.min.js +10 -0
- data/app/assets/javascripts/camaleon_cms/admin/_jquery.slugify.js +67 -0
- data/app/assets/javascripts/camaleon_cms/admin/_jquery.tagsinput.min.js +1 -0
- data/app/assets/javascripts/camaleon_cms/admin/_libraries.js +136 -0
- data/app/assets/javascripts/camaleon_cms/admin/_modal.js +156 -0
- data/app/assets/javascripts/camaleon_cms/admin/_post.js +317 -0
- data/app/assets/javascripts/camaleon_cms/admin/_posttype.js.coffee +27 -0
- data/app/assets/javascripts/camaleon_cms/admin/_translator.js +123 -0
- data/app/assets/javascripts/camaleon_cms/admin/_underscore.js +1536 -0
- data/app/assets/javascripts/camaleon_cms/admin/_user_profile.js +28 -0
- data/app/assets/javascripts/camaleon_cms/admin/admin-basic-manifest.js +3 -0
- data/app/assets/javascripts/camaleon_cms/admin/admin-manifest.js +55 -0
- data/app/assets/javascripts/camaleon_cms/admin/bootstrap-colorpicker.js +540 -0
- data/app/assets/javascripts/camaleon_cms/admin/custom_fields_form.js +94 -0
- data/app/assets/javascripts/camaleon_cms/admin/introjs/_intro.min.js +1317 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery-sieve.js +6 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery.nestable.js +485 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery.validate.js +123 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/de.js +20 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/es.js +27 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/fr.js +49 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/it.js +23 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/nl.js +33 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/pt-BR.js +74 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/ru.js +19 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/uk.js +23 -0
- data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/zh-CN.js +23 -0
- data/app/assets/javascripts/camaleon_cms/admin/lte/app.js +758 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/_moment.js +3606 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/ar.js +136 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/ca.js +79 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/de.js +76 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/es.js +79 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/fr.js +62 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/it.js +70 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/ja.js +65 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/nl.js +71 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/pl.js +105 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/pt-BR.js +60 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/pt.js +64 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/ru.js +166 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/uk.js +151 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/zh-CN.js +127 -0
- data/app/assets/javascripts/camaleon_cms/admin/nav_menu.js.coffee +139 -0
- data/app/assets/javascripts/camaleon_cms/admin/tageditor/_jquery.caret.min.js +2 -0
- data/app/assets/javascripts/camaleon_cms/admin/tageditor/_jquery.tag-editor.js +352 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/de.js +219 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/en.js +179 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/es.js +177 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/fr.js +219 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/it.js +219 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/nl.js +219 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/pt-BR.js +219 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/readme.md +3 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/ru.js +219 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/uk.js +219 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/zh-CN.js +228 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/filemanager/plugin.min.js +30 -0
- data/app/assets/javascripts/camaleon_cms/admin/uploader/_cropper.min.js +3003 -0
- data/app/assets/javascripts/camaleon_cms/admin/uploader/_jquery.form.js +1277 -0
- data/app/assets/javascripts/camaleon_cms/admin/uploader/_jquery.uploadfile.min.js +8 -0
- data/app/assets/javascripts/camaleon_cms/admin/uploader/_media_manager.js.coffee +455 -0
- data/app/assets/javascripts/camaleon_cms/admin/uploader/uploader_manifest.js +5 -0
- data/app/assets/javascripts/camaleon_cms/bootstrap.min.js +7 -0
- data/app/assets/stylesheets/camaleon_cms/admin/_bootstrap-datepicker.css.scss +373 -0
- data/app/assets/stylesheets/camaleon_cms/admin/_bootstrap-select.css +7 -0
- data/app/assets/stylesheets/camaleon_cms/admin/_custom_admin.css.scss +359 -0
- data/app/assets/stylesheets/camaleon_cms/admin/_jquery.tagsinput.css +72 -0
- data/app/assets/stylesheets/camaleon_cms/admin/admin-basic-manifest.css +16 -0
- data/app/assets/stylesheets/camaleon_cms/admin/admin-manifest.css +28 -0
- data/app/assets/stylesheets/camaleon_cms/admin/colorpicker.css.scss +96 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/bg.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/colorpicker/alpha.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/colorpicker/hue.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/colorpicker/saturation.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/girls-1.jpg +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/jquery/resize-icon.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/loading.gif +1 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/logo-small.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/logo.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/no_image.jpg +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/rormeleon-white.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/img/thumb_no_found.jpg +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/introjs/_introjs.min.css +1 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/_jquery-ui.scss +1226 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-icons_222222_256x240.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-icons_888888_256x240.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/_admin.css.scss +4561 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-black-light.css +176 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-black.css +154 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-blue-light.css +167 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-blue.css +142 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-green-light.css +156 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-green.css +134 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-purple-light.css +156 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-purple.css +135 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-red-light.css +156 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-red.css +134 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-yellow-light.css +156 -0
- data/app/assets/stylesheets/camaleon_cms/admin/lte/skins/skin-yellow.css +134 -0
- data/app/assets/stylesheets/camaleon_cms/admin/nestable/jquery.nestable.css +103 -0
- data/app/assets/stylesheets/camaleon_cms/admin/tageditor/_jquery.tag-editor.css.scss +49 -0
- data/app/assets/stylesheets/camaleon_cms/admin/uploader/_cropper.min.css +9 -0
- data/app/assets/stylesheets/camaleon_cms/admin/uploader/_uploadfile.css.scss +256 -0
- data/app/assets/stylesheets/camaleon_cms/admin/uploader/uploader_manifest.css +4 -0
- data/app/assets/stylesheets/camaleon_cms/admin/widgets.css.scss +26 -0
- data/app/assets/stylesheets/camaleon_cms/bootstrap.min.css.scss +6799 -0
- data/app/controllers/camaleon_cms/admin/appearances/nav_menus_controller.rb +129 -0
- data/app/controllers/camaleon_cms/admin/appearances/themes_controller.rb +29 -0
- data/app/controllers/camaleon_cms/admin/appearances/widgets/assign_controller.rb +41 -0
- data/app/controllers/camaleon_cms/admin/appearances/widgets/main_controller.rb +55 -0
- data/app/controllers/camaleon_cms/admin/appearances/widgets/sidebar_controller.rb +56 -0
- data/app/controllers/camaleon_cms/admin/categories_controller.rb +80 -0
- data/app/controllers/camaleon_cms/admin/comments_controller.rb +90 -0
- data/app/controllers/camaleon_cms/admin/installers_controller.rb +32 -0
- data/app/controllers/camaleon_cms/admin/media_controller.rb +109 -0
- data/app/controllers/camaleon_cms/admin/plugins_controller.rb +46 -0
- data/app/controllers/camaleon_cms/admin/post_tags_controller.rb +81 -0
- data/app/controllers/camaleon_cms/admin/posts/drafts_controller.rb +58 -0
- data/app/controllers/camaleon_cms/admin/posts_controller.rb +212 -0
- data/app/controllers/camaleon_cms/admin/sessions_controller.rb +172 -0
- data/app/controllers/camaleon_cms/admin/settings/custom_fields_controller.rb +108 -0
- data/app/controllers/camaleon_cms/admin/settings/post_types_controller.rb +63 -0
- data/app/controllers/camaleon_cms/admin/settings/sites_controller.rb +87 -0
- data/app/controllers/camaleon_cms/admin/settings_controller.rb +86 -0
- data/app/controllers/camaleon_cms/admin/user_roles_controller.rb +74 -0
- data/app/controllers/camaleon_cms/admin/users_controller.rb +124 -0
- data/app/controllers/camaleon_cms/admin_controller.rb +82 -0
- data/app/controllers/camaleon_cms/apps/plugins_admin_controller.rb +19 -0
- data/app/controllers/camaleon_cms/apps/plugins_front_controller.rb +19 -0
- data/app/controllers/camaleon_cms/apps/themes_admin_controller.rb +12 -0
- data/app/controllers/camaleon_cms/apps/themes_front_controller.rb +12 -0
- data/app/controllers/camaleon_cms/camaleon_controller.rb +139 -0
- data/app/controllers/camaleon_cms/frontend_controller.rb +277 -0
- data/app/controllers/concerns/camaleon_cms/frontend_concern.rb +66 -0
- data/app/decorators/camaleon_cms/application_decorator.rb +54 -0
- data/app/decorators/camaleon_cms/category_decorator.rb +58 -0
- data/app/decorators/camaleon_cms/custom_field_decorator.rb +11 -0
- data/app/decorators/camaleon_cms/custom_fields_concern.rb +81 -0
- data/app/decorators/camaleon_cms/metas_decorator_methods.rb +11 -0
- data/app/decorators/camaleon_cms/nav_menu_item_decorator.rb +4 -0
- data/app/decorators/camaleon_cms/plugin_decorator.rb +3 -0
- data/app/decorators/camaleon_cms/post_comment_decorator.rb +39 -0
- data/app/decorators/camaleon_cms/post_decorator.rb +251 -0
- data/app/decorators/camaleon_cms/post_tag_decorator.rb +45 -0
- data/app/decorators/camaleon_cms/post_type_decorator.rb +87 -0
- data/app/decorators/camaleon_cms/site_decorator.rb +200 -0
- data/app/decorators/camaleon_cms/term_taxonomy_decorator.rb +93 -0
- data/app/decorators/camaleon_cms/theme_decorator.rb +18 -0
- data/app/decorators/camaleon_cms/user_decorator.rb +73 -0
- data/app/decorators/camaleon_cms/user_role_decorator.rb +12 -0
- data/app/decorators/camaleon_cms/widget_decorator.rb +4 -0
- data/app/helpers/camaleon_cms/admin/application_helper.rb +36 -0
- data/app/helpers/camaleon_cms/admin/breadcrumb_helper.rb +15 -0
- data/app/helpers/camaleon_cms/admin/category_helper.rb +24 -0
- data/app/helpers/camaleon_cms/admin/custom_fields_helper.rb +354 -0
- data/app/helpers/camaleon_cms/admin/menus_helper.rb +182 -0
- data/app/helpers/camaleon_cms/admin/post_type_helper.rb +67 -0
- data/app/helpers/camaleon_cms/camaleon_helper.rb +88 -0
- data/app/helpers/camaleon_cms/captcha_helper.rb +93 -0
- data/app/helpers/camaleon_cms/comment_helper.rb +48 -0
- data/app/helpers/camaleon_cms/content_helper.rb +29 -0
- data/app/helpers/camaleon_cms/email_helper.rb +56 -0
- data/app/helpers/camaleon_cms/frontend/application_helper.rb +36 -0
- data/app/helpers/camaleon_cms/frontend/content_select_helper.rb +161 -0
- data/app/helpers/camaleon_cms/frontend/nav_menu_helper.rb +237 -0
- data/app/helpers/camaleon_cms/frontend/seo_helper.rb +86 -0
- data/app/helpers/camaleon_cms/frontend/site_helper.rb +70 -0
- data/app/helpers/camaleon_cms/hooks_helper.rb +57 -0
- data/app/helpers/camaleon_cms/html_helper.rb +134 -0
- data/app/helpers/camaleon_cms/plugins_helper.rb +173 -0
- data/app/helpers/camaleon_cms/session_helper.rb +161 -0
- data/app/helpers/camaleon_cms/short_code_helper.rb +283 -0
- data/app/helpers/camaleon_cms/site_helper.rb +103 -0
- data/app/helpers/camaleon_cms/theme_helper.rb +95 -0
- data/app/helpers/camaleon_cms/uploader_helper.rb +329 -0
- data/app/helpers/camaleon_cms/user_roles_helper.rb +13 -0
- data/app/mailers/camaleon_cms/html_mailer.rb +87 -0
- data/app/models/camaleon_cms/ability.rb +109 -0
- data/app/models/camaleon_cms/category.rb +52 -0
- data/app/models/camaleon_cms/custom_field.rb +35 -0
- data/app/models/camaleon_cms/custom_field_group.rb +136 -0
- data/app/models/camaleon_cms/custom_fields_relationship.rb +27 -0
- data/app/models/camaleon_cms/media.rb +54 -0
- data/app/models/camaleon_cms/meta.rb +4 -0
- data/app/models/camaleon_cms/nav_menu.rb +29 -0
- data/app/models/camaleon_cms/nav_menu_item.rb +64 -0
- data/app/models/camaleon_cms/plugin.rb +76 -0
- data/app/models/camaleon_cms/post.rb +265 -0
- data/app/models/camaleon_cms/post_comment.rb +44 -0
- data/app/models/camaleon_cms/post_default.rb +78 -0
- data/app/models/camaleon_cms/post_relationship.rb +20 -0
- data/app/models/camaleon_cms/post_tag.rb +7 -0
- data/app/models/camaleon_cms/post_type.rb +189 -0
- data/app/models/camaleon_cms/site.rb +242 -0
- data/app/models/camaleon_cms/term_relationship.rb +18 -0
- data/app/models/camaleon_cms/term_taxonomy.rb +61 -0
- data/app/models/camaleon_cms/theme.rb +31 -0
- data/app/models/camaleon_cms/user.rb +18 -0
- data/app/models/camaleon_cms/user_role.rb +138 -0
- data/app/models/camaleon_cms/widget.rb +5 -0
- data/app/models/camaleon_cms/widget/assigned.rb +27 -0
- data/app/models/camaleon_cms/widget/main.rb +44 -0
- data/app/models/camaleon_cms/widget/sidebar.rb +20 -0
- data/app/models/concerns/camaleon_cms/categories_tags_for_posts.rb +132 -0
- data/app/models/concerns/camaleon_cms/custom_fields_read.rb +310 -0
- data/app/models/concerns/camaleon_cms/metas.rb +138 -0
- data/app/models/concerns/camaleon_cms/site_default_settings.rb +87 -0
- data/app/models/concerns/camaleon_cms/user_methods.rb +133 -0
- data/app/models/plugins.rb +5 -0
- data/app/models/themes.rb +5 -0
- data/app/uploaders/camaleon_cms_aws_uploader.rb +132 -0
- data/app/uploaders/camaleon_cms_local_uploader.rb +108 -0
- data/app/uploaders/camaleon_cms_uploader.rb +164 -0
- data/app/views/camaleon_cms/404.html.erb +4 -0
- data/app/views/camaleon_cms/500.html.erb +4 -0
- data/app/views/camaleon_cms/_flash_messages.html.erb +39 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_custom_fields.html.erb +6 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_custom_menus.html.erb +42 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_external_menu.html.erb +23 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_form.html.erb +13 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_left_menu_items.html.erb +77 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_items.html.erb +19 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_items_list.html.erb +12 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_options.html.erb +21 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/index.html.erb +14 -0
- data/app/views/camaleon_cms/admin/appearances/themes/index.html.erb +70 -0
- data/app/views/camaleon_cms/admin/appearances/themes/preview.html.erb +1 -0
- data/app/views/camaleon_cms/admin/appearances/themes/theme_load_data.html.erb +40 -0
- data/app/views/camaleon_cms/admin/appearances/widgets/assign/_form.html.erb +35 -0
- data/app/views/camaleon_cms/admin/appearances/widgets/main/_sidebar.html.erb +29 -0
- data/app/views/camaleon_cms/admin/appearances/widgets/main/form.html.erb +27 -0
- data/app/views/camaleon_cms/admin/appearances/widgets/main/index.html.erb +41 -0
- data/app/views/camaleon_cms/admin/appearances/widgets/sidebar/form.html.erb +23 -0
- data/app/views/camaleon_cms/admin/categories/_form.html.erb +34 -0
- data/app/views/camaleon_cms/admin/categories/edit.html.erb +14 -0
- data/app/views/camaleon_cms/admin/categories/index.html.erb +68 -0
- data/app/views/camaleon_cms/admin/comments/form.html.erb +12 -0
- data/app/views/camaleon_cms/admin/comments/form_answer.html.erb +12 -0
- data/app/views/camaleon_cms/admin/comments/index.html.erb +21 -0
- data/app/views/camaleon_cms/admin/comments/list.html.erb +36 -0
- data/app/views/camaleon_cms/admin/dashboard.html.erb +25 -0
- data/app/views/camaleon_cms/admin/installers/form.html.erb +19 -0
- data/app/views/camaleon_cms/admin/installers/welcome.html.erb +8 -0
- data/app/views/camaleon_cms/admin/media/_render_file_item.html.erb +57 -0
- data/app/views/camaleon_cms/admin/media/index.html.erb +70 -0
- data/app/views/camaleon_cms/admin/plugins/_plugins_list.html.erb +43 -0
- data/app/views/camaleon_cms/admin/plugins/index.html.erb +43 -0
- data/app/views/camaleon_cms/admin/post_tags/_form.html.erb +26 -0
- data/app/views/camaleon_cms/admin/post_tags/edit.html.erb +14 -0
- data/app/views/camaleon_cms/admin/post_tags/index.html.erb +59 -0
- data/app/views/camaleon_cms/admin/posts/_filter_posts.html.erb +5 -0
- data/app/views/camaleon_cms/admin/posts/_sidebar.html.erb +156 -0
- data/app/views/camaleon_cms/admin/posts/form.html.erb +96 -0
- data/app/views/camaleon_cms/admin/posts/index.html.erb +112 -0
- data/app/views/camaleon_cms/admin/posts/show.html.erb +20 -0
- data/app/views/camaleon_cms/admin/search.html.erb +73 -0
- data/app/views/camaleon_cms/admin/sessions/forgot.html.erb +44 -0
- data/app/views/camaleon_cms/admin/sessions/login.html.erb +47 -0
- data/app/views/camaleon_cms/admin/sessions/register.html.erb +63 -0
- data/app/views/camaleon_cms/admin/settings/_configuration_settings.html.erb +75 -0
- data/app/views/camaleon_cms/admin/settings/_email_settings.html.erb +58 -0
- data/app/views/camaleon_cms/admin/settings/_file_system_settings.html.erb +32 -0
- data/app/views/camaleon_cms/admin/settings/_media_settings.html.erb +14 -0
- data/app/views/camaleon_cms/admin/settings/_seo_settings.html.erb +22 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/_get_items.html.erb +185 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/_meta_data.html.erb +93 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/_render.html.erb +50 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/_render_category_simple.html.erb +25 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_audio.html.erb +4 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_categories.html.erb +11 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_checkbox.html.erb +8 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_checkboxes.html.erb +5 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_colorpicker.html.erb +7 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_date.html.erb +6 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_editor.html.erb +3 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_email.html.erb +3 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_field_attrs.html.erb +8 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_file.html.erb +4 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_image.html.erb +16 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_numeric.html.erb +4 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_phone.html.erb +3 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_post_types.html.erb +8 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_posts.html.erb +14 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_private_file.html.erb +4 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_radio.html.erb +5 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_select.html.erb +7 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_select_eval.html.erb +3 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_text_area.html.erb +3 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_text_box.html.erb +3 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_url.html.erb +3 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_users.html.erb +8 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_video.html.erb +4 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/form.html.erb +167 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/index.html.erb +111 -0
- data/app/views/camaleon_cms/admin/settings/languages.html.erb +60 -0
- data/app/views/camaleon_cms/admin/settings/post_types/_form.html.erb +171 -0
- data/app/views/camaleon_cms/admin/settings/post_types/edit.html.erb +14 -0
- data/app/views/camaleon_cms/admin/settings/post_types/index.html.erb +55 -0
- data/app/views/camaleon_cms/admin/settings/shortcodes.html.erb +37 -0
- data/app/views/camaleon_cms/admin/settings/site.html.erb +98 -0
- data/app/views/camaleon_cms/admin/settings/sites/form.html.erb +35 -0
- data/app/views/camaleon_cms/admin/settings/sites/index.html.erb +60 -0
- data/app/views/camaleon_cms/admin/settings/theme.html.erb +20 -0
- data/app/views/camaleon_cms/admin/user_roles/form.html.erb +156 -0
- data/app/views/camaleon_cms/admin/user_roles/index.html.erb +57 -0
- data/app/views/camaleon_cms/admin/users/form.html.erb +161 -0
- data/app/views/camaleon_cms/admin/users/index.html.erb +63 -0
- data/app/views/camaleon_cms/admin/users/profile.html.erb +1 -0
- data/app/views/camaleon_cms/admin/users/profile/_activity.html.erb +180 -0
- data/app/views/camaleon_cms/admin/users/profile/_settings.html.erb +15 -0
- data/app/views/camaleon_cms/default_theme/category.html.erb +26 -0
- data/app/views/camaleon_cms/default_theme/category.json.jbuilder +15 -0
- data/app/views/camaleon_cms/default_theme/category.rss.builder +23 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/audio.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/checkbox.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/checkboxes.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/colorpicker.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/date.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/editor.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/email.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/field_attrs.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/file.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/image.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/numeric.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/phone.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/posts.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/radio.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/select.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/select_eval.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/text_area.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/text_box.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/url.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/users.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/custom_fields/video.html.erb +3 -0
- data/app/views/camaleon_cms/default_theme/index.html.erb +70 -0
- data/app/views/camaleon_cms/default_theme/index.json.jbuilder +14 -0
- data/app/views/camaleon_cms/default_theme/partials/_breadcrumb.html.erb +10 -0
- data/app/views/camaleon_cms/default_theme/partials/_cama_category_entry.json.jbuilder +6 -0
- data/app/views/camaleon_cms/default_theme/partials/_cama_comments_entry.json.jbuilder +6 -0
- data/app/views/camaleon_cms/default_theme/partials/_cama_post_entry.json.jbuilder +6 -0
- data/app/views/camaleon_cms/default_theme/partials/_cama_post_type_entry.json.jbuilder +6 -0
- data/app/views/camaleon_cms/default_theme/partials/_cama_posts_entries.json.jbuilder +8 -0
- data/app/views/camaleon_cms/default_theme/partials/_cama_tag_entry.json.jbuilder +5 -0
- data/app/views/camaleon_cms/default_theme/partials/_cama_user_entry.json.jbuilder +5 -0
- data/app/views/camaleon_cms/default_theme/partials/_categories_list.html.erb +23 -0
- data/app/views/camaleon_cms/default_theme/partials/_comments.html.erb +48 -0
- data/app/views/camaleon_cms/default_theme/partials/_comments_list.html.erb +21 -0
- data/app/views/camaleon_cms/default_theme/partials/_comments_list2.html.erb +24 -0
- data/app/views/camaleon_cms/default_theme/partials/_flash_messages.html.erb +26 -0
- data/app/views/camaleon_cms/default_theme/partials/_forms.html.erb +19 -0
- data/app/views/camaleon_cms/default_theme/partials/_post_list_item.html.erb +13 -0
- data/app/views/camaleon_cms/default_theme/partials/_render_custom_field.html.erb +55 -0
- data/app/views/camaleon_cms/default_theme/partials/_search_form.html.erb +8 -0
- data/app/views/camaleon_cms/default_theme/partials/_sidebar.html.erb +66 -0
- data/app/views/camaleon_cms/default_theme/post_tag.html.erb +18 -0
- data/app/views/camaleon_cms/default_theme/post_tag.json.jbuilder +10 -0
- data/app/views/camaleon_cms/default_theme/post_tag.rss.builder +22 -0
- data/app/views/camaleon_cms/default_theme/post_type.html.erb +25 -0
- data/app/views/camaleon_cms/default_theme/post_type.json.jbuilder +13 -0
- data/app/views/camaleon_cms/default_theme/post_type.rss.builder +22 -0
- data/app/views/camaleon_cms/default_theme/profile.html.erb +18 -0
- data/app/views/camaleon_cms/default_theme/profile.json.jbuilder +4 -0
- data/app/views/camaleon_cms/default_theme/robots.text.erb +1 -0
- data/app/views/camaleon_cms/default_theme/rss.rss.builder +21 -0
- data/app/views/camaleon_cms/default_theme/search.html.erb +13 -0
- data/app/views/camaleon_cms/default_theme/search.json.jbuilder +1 -0
- data/app/views/camaleon_cms/default_theme/single.html.erb +32 -0
- data/app/views/camaleon_cms/default_theme/single.json.jbuilder +21 -0
- data/app/views/camaleon_cms/default_theme/single.rss.builder +12 -0
- data/app/views/camaleon_cms/default_theme/sitemap.html.erb +23 -0
- data/app/views/camaleon_cms/default_theme/sitemap.xml.builder +60 -0
- data/app/views/camaleon_cms/html_mailer/confirm_email.html.erb +3 -0
- data/app/views/camaleon_cms/html_mailer/mailer.html.erb +4 -0
- data/app/views/camaleon_cms/html_mailer/password_reset.html.erb +3 -0
- data/app/views/camaleon_cms/shortcode_templates/widget.html.erb +11 -0
- data/app/views/layouts/camaleon_cms/admin.html.erb +54 -0
- data/app/views/layouts/camaleon_cms/admin/_ajax.html.erb +8 -0
- data/app/views/layouts/camaleon_cms/admin/_flash_messages.html.erb +43 -0
- data/app/views/layouts/camaleon_cms/admin/_footer.html.erb +13 -0
- data/app/views/layouts/camaleon_cms/admin/_form_error.html.erb +10 -0
- data/app/views/layouts/camaleon_cms/admin/_header.html.erb +51 -0
- data/app/views/layouts/camaleon_cms/admin/_sidebar.html.erb +19 -0
- data/app/views/layouts/camaleon_cms/admin/installer.html.erb +35 -0
- data/app/views/layouts/camaleon_cms/application.html.erb +15 -0
- data/app/views/layouts/camaleon_cms/login.html.erb +22 -0
- data/app/views/layouts/camaleon_cms/mailer.html.erb +22 -0
- data/config/initializers/action_view.rb +56 -0
- data/config/initializers/active_record_extension.rb +104 -0
- data/config/initializers/assets.rb +27 -0
- data/config/initializers/custom_initializers.rb +10 -0
- data/config/initializers/mobu.rb +24 -0
- data/config/initializers/model_alias.rb +18 -0
- data/config/initializers/sass.rb +52 -0
- data/config/locales/ar.yml +275 -0
- data/config/locales/camaleon_cms/admin/ar.yml +683 -0
- data/config/locales/camaleon_cms/admin/de.yml +682 -0
- data/config/locales/camaleon_cms/admin/en.yml +682 -0
- data/config/locales/camaleon_cms/admin/es.yml +654 -0
- data/config/locales/camaleon_cms/admin/fr.yml +663 -0
- data/config/locales/camaleon_cms/admin/it.yml +633 -0
- data/config/locales/camaleon_cms/admin/js.yml +435 -0
- data/config/locales/camaleon_cms/admin/nl.yml +659 -0
- data/config/locales/camaleon_cms/admin/pt-BR.yml +643 -0
- data/config/locales/camaleon_cms/admin/pt.yml +641 -0
- data/config/locales/camaleon_cms/admin/ru.yml +670 -0
- data/config/locales/camaleon_cms/admin/uk.yml +670 -0
- data/config/locales/camaleon_cms/admin/zh-CH.yml +703 -0
- data/config/locales/camaleon_cms/common.yml +784 -0
- data/config/locales/camaleon_cms/languages.yml +167 -0
- data/config/locales/camaleon_cms/routes.yml +71 -0
- data/config/locales/de.yml +210 -0
- data/config/locales/en.yml +207 -0
- data/config/locales/es.yml +198 -0
- data/config/locales/fr.yml +207 -0
- data/config/locales/it.yml +205 -0
- data/config/locales/nl.yml +209 -0
- data/config/locales/pl.yml +237 -0
- data/config/locales/pt-BR.yml +203 -0
- data/config/locales/pt.yml +201 -0
- data/config/locales/ru.yml +207 -0
- data/config/locales/uk.yml +257 -0
- data/config/locales/zh-CH.yml +194 -0
- data/config/routes.rb +11 -0
- data/config/routes/admin.rb +148 -0
- data/config/routes/frontend.rb +96 -0
- data/config/system.json +19 -0
- data/db/migrate/20150611161134_post_table_into_utf8.rb +124 -0
- data/db/migrate/20150926095310_rename_column_posts.rb +18 -0
- data/db/migrate/20151212095328_add_confirm_token_to_users.rb +7 -0
- data/db/migrate/20160504155652_add_feature_to_posts.rb +5 -0
- data/db/migrate/20160504155653_move_first_name_of_users.rb +9 -0
- data/db/migrate/20160606135421_improve_menus_structure.rb +7 -0
- data/db/migrate/20160609121449_add_group_to_custom_field_values.rb +5 -0
- data/db/migrate/20161206211917_install_migrated_seo_plugin.rb +8 -0
- data/db/migrate/20161215202255_drop_user_relationship_table.rb +5 -0
- data/db/migrate/20180124132318_create_media.rb +17 -0
- data/db/migrate/20180704211100_adjust_field_length.rb +10 -0
- data/lib/camaleon_cms.rb +5 -0
- data/lib/camaleon_cms/engine.rb +84 -0
- data/lib/camaleon_cms/version.rb +3 -0
- data/lib/captcha/bumpyroad.ttf +0 -0
- data/lib/captcha/captcha_0.jpg +0 -0
- data/lib/captcha/captcha_1.jpg +0 -0
- data/lib/captcha/captcha_10.jpg +0 -0
- data/lib/captcha/captcha_11.jpg +0 -0
- data/lib/captcha/captcha_2.jpg +0 -0
- data/lib/captcha/captcha_3.jpg +0 -0
- data/lib/captcha/captcha_4.jpg +0 -0
- data/lib/captcha/captcha_5.jpg +0 -0
- data/lib/captcha/captcha_6.jpg +0 -0
- data/lib/captcha/captcha_7.jpg +0 -0
- data/lib/captcha/captcha_8.jpg +0 -0
- data/lib/captcha/captcha_9.jpg +0 -0
- data/lib/ext/array.rb +59 -0
- data/lib/ext/hash.rb +41 -0
- data/lib/ext/string.rb +162 -0
- data/lib/ext/translator.rb +84 -0
- data/lib/generators/camaleon_cms/gem_plugin_generator.rb +140 -0
- data/lib/generators/camaleon_cms/gem_plugin_template/app/controllers/plugins/my_plugin/admin_controller.rb +18 -0
- data/lib/generators/camaleon_cms/gem_plugin_template/app/controllers/plugins/my_plugin/front_controller.rb +8 -0
- data/lib/generators/camaleon_cms/gem_plugin_template/app/helpers/plugins/my_plugin/main_helper.rb +29 -0
- data/lib/generators/camaleon_cms/gem_plugin_template/app/models/plugins/my_plugin/my_plugin.rb +6 -0
- data/lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/admin/index.html.erb +9 -0
- data/lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/admin/settings.html.erb +21 -0
- data/lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/front/index.html.erb +2 -0
- data/lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/layouts/readme.txt +2 -0
- data/lib/generators/camaleon_cms/gem_plugin_template/config/camaleon_plugin.json +14 -0
- data/lib/generators/camaleon_cms/gem_plugin_template/config/initializers/custom_models.rb +5 -0
- data/lib/generators/camaleon_cms/install_generator.rb +43 -0
- data/lib/generators/camaleon_cms/install_template/apps/themes/readme.txt +0 -0
- data/lib/generators/camaleon_cms/install_template/plugin_routes.rb +22 -0
- data/lib/generators/camaleon_cms/install_template/system.json +11 -0
- data/lib/generators/camaleon_cms/theme_generator.rb +66 -0
- data/lib/generators/camaleon_cms/theme_template/assets/css/main.css +13 -0
- data/lib/generators/camaleon_cms/theme_template/assets/images/image.png +0 -0
- data/lib/generators/camaleon_cms/theme_template/assets/js/main.js +14 -0
- data/lib/generators/camaleon_cms/theme_template/config/config.json +14 -0
- data/lib/generators/camaleon_cms/theme_template/main_helper.rb +27 -0
- data/lib/generators/camaleon_cms/theme_template/views/admin/settings.html.erb +2 -0
- data/lib/generators/camaleon_cms/theme_template/views/index.html.erb +1 -0
- data/lib/generators/camaleon_cms/theme_template/views/layouts/index.html.erb +69 -0
- data/lib/generators/camaleon_cms/theme_template/views/partials/readme.txt +1 -0
- data/lib/plugin_routes.rb +439 -0
- data/lib/tasks/camaleon_cms/camaleon_tasks.rake +30 -0
- data/lib/tasks/camaleon_cms/rspec_test.rake +20 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/config/manifest.js +8 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +36 -0
- data/spec/dummy/bin/update +31 -0
- data/spec/dummy/bin/yarn +11 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +27 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +44 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/schema.rb +186 -0
- data/spec/factories/post.rb +44 -0
- data/spec/factories/post_type.rb +9 -0
- data/spec/factories/site.rb +18 -0
- data/spec/factories/user.rb +19 -0
- data/spec/features/admin/categories_spec.rb +25 -0
- data/spec/features/admin/comments_spec.rb +52 -0
- data/spec/features/admin/contact_form_spec.rb +60 -0
- data/spec/features/admin/content_groups_spec.rb +53 -0
- data/spec/features/admin/custom_fields_spec.rb +49 -0
- data/spec/features/admin/languages_spec.rb +37 -0
- data/spec/features/admin/media_spec.rb +50 -0
- data/spec/features/admin/menus_spec.rb +50 -0
- data/spec/features/admin/pages_spec.rb +35 -0
- data/spec/features/admin/plugins_spec.rb +29 -0
- data/spec/features/admin/posts_spec.rb +37 -0
- data/spec/features/admin/session_spec.rb +102 -0
- data/spec/features/admin/settings_spec.rb +17 -0
- data/spec/features/admin/shortcodes_spec.rb +11 -0
- data/spec/features/admin/sites_spec.rb +53 -0
- data/spec/features/admin/tags_spec.rb +34 -0
- data/spec/features/admin/themes_spec.rb +18 -0
- data/spec/features/admin/user_roles_spec.rb +66 -0
- data/spec/features/admin/users_spec.rb +81 -0
- data/spec/features/admin/widgets_spec.rb +59 -0
- data/spec/features/frontend/pages_spec.rb +136 -0
- data/spec/features/frontend/post_type_spec.rb +16 -0
- data/spec/helpers/email_helper_spec.rb +16 -0
- data/spec/helpers/short_code_helper_spec.rb +64 -0
- data/spec/helpers/uploader_helper_spec.rb +56 -0
- data/spec/mailers/send_mail_spec.rb +37 -0
- data/spec/models/post_spec.rb +50 -0
- data/spec/models/user_spec.rb +12 -0
- data/spec/rails_helper.rb +50 -0
- data/spec/routing/post_type_routes_spec.rb +12 -0
- data/spec/spec_helper.rb +167 -0
- data/spec/support/capybara_normalize_whitespace_patch.rb +17 -0
- data/spec/support/common.rb +119 -0
- data/spec/support/fixtures/rails.png +0 -0
- data/spec/support/wait_for_ajax.rb +30 -0
- metadata +1213 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
module CamaleonCms::ThemeHelper
|
2
|
+
def theme_init()
|
3
|
+
@_front_breadcrumb = []
|
4
|
+
end
|
5
|
+
|
6
|
+
# return theme full asset path
|
7
|
+
# theme_name: theme name, if nil, then will use current theme
|
8
|
+
# asset: asset file name, if asset is present return full path to this asset
|
9
|
+
# sample: <script src="<%= theme_asset_path("js/admin.js") %>"></script> => return: /assets/themes/my_theme/assets/js/admin-54505620f.js
|
10
|
+
def theme_asset_path(asset = nil, theme_name = nil)
|
11
|
+
if theme_name.present? && theme_name.include?("/")
|
12
|
+
return theme_asset_url(theme_name, current_theme.slug)
|
13
|
+
end
|
14
|
+
|
15
|
+
settings = theme_name.present? ? PluginRoutes.theme_info(theme_name) : current_theme.settings
|
16
|
+
folder_name = settings["key"]
|
17
|
+
if settings["gem_mode"]
|
18
|
+
p = "themes/#{folder_name}/#{asset}"
|
19
|
+
else
|
20
|
+
p = "themes/#{folder_name}/assets/#{asset}"
|
21
|
+
end
|
22
|
+
p
|
23
|
+
end
|
24
|
+
alias_method :theme_asset, :theme_asset_path
|
25
|
+
alias_method :theme_gem_asset, :theme_asset_path
|
26
|
+
|
27
|
+
# return the full url for asset of current theme:
|
28
|
+
# asset: (String) asset name
|
29
|
+
# theme_name: (optional) theme name, default (current theme caller to this function)
|
30
|
+
# sample:
|
31
|
+
# theme_asset_url("css/main.css") => return: http://myhost.com/assets/themes/my_theme/assets/css/main-54505620f.css
|
32
|
+
def theme_asset_url(asset, theme_name = nil)
|
33
|
+
p = theme_asset_path(asset, theme_name)
|
34
|
+
begin
|
35
|
+
ActionController::Base.helpers.asset_url(p)
|
36
|
+
rescue NoMethodError => e
|
37
|
+
p
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# return theme view path including the path of current theme
|
42
|
+
# view_name: name of the view or template
|
43
|
+
# sample: theme_view("index") => "themes/my_theme/index"
|
44
|
+
def theme_view(view_name, deprecated_attr = "")
|
45
|
+
view_name = deprecated_attr if deprecated_attr.present?
|
46
|
+
if current_theme.settings["gem_mode"]
|
47
|
+
"themes/#{current_theme.slug}/#{view_name}"
|
48
|
+
else
|
49
|
+
"themes/#{current_theme.slug}/views/#{view_name}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# assign the layout for this request
|
54
|
+
# asset: asset file name, if asset is present return full path to this asset
|
55
|
+
# layout_name: layout name
|
56
|
+
def theme_layout(layout_name, theme_name = nil)
|
57
|
+
if current_theme.settings["gem_mode"]
|
58
|
+
"themes/#{current_theme.slug}/layouts/#{layout_name}"
|
59
|
+
else
|
60
|
+
"themes/#{current_theme.slug}/views/layouts/#{layout_name}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# return theme key for current theme file (helper|controller|view)
|
65
|
+
# DEPRECATED, instead use: current_theme
|
66
|
+
# index: internal control
|
67
|
+
def self_theme_key(index = 0)
|
68
|
+
k = "/themes/"
|
69
|
+
f = caller[index]
|
70
|
+
if f.include?(k)
|
71
|
+
f.split(k).last.split("/").first
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# returns file system path to theme asset
|
76
|
+
# theme_name: theme name, if nil, then will use current theme
|
77
|
+
# asset: asset file name, if asset is present return full path to this asset
|
78
|
+
# sample: theme_asset_file_path('images/foo.jpg') => return: /home/camaleon/my-site/app/apps/themes/default/assets/images/foo.jpg
|
79
|
+
def theme_asset_file_path(asset = nil, theme_name = nil)
|
80
|
+
theme_path = current_theme.settings['path']
|
81
|
+
if theme_name && theme = Theme.where(name: theme_name).first
|
82
|
+
theme_path = theme.settings['path']
|
83
|
+
end
|
84
|
+
"#{theme_path}/assets/#{asset}"
|
85
|
+
end
|
86
|
+
|
87
|
+
# Returns a default message if no pages exist
|
88
|
+
def theme_home_page
|
89
|
+
current_site.the_post(current_theme.get_field("home_page")) ||
|
90
|
+
current_site.the_posts("page").first ||
|
91
|
+
CamaleonCms::Post.new(title: 'Hello World!',
|
92
|
+
content: 'Please add a page.',
|
93
|
+
status: 'published')
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,329 @@
|
|
1
|
+
module CamaleonCms::UploaderHelper
|
2
|
+
include ActionView::Helpers::NumberHelper
|
3
|
+
include CamaleonCms::CamaleonHelper
|
4
|
+
# upload a file into server
|
5
|
+
# settings:
|
6
|
+
# folder: Directory where the file will be saved (default: "")
|
7
|
+
# sample: temporal => will save in /rails_path/public/temporal
|
8
|
+
# generate_thumb: true, # generate thumb image if this is image format (default true)
|
9
|
+
# maximum: maximum bytes permitted to upload (default: 1000MG)
|
10
|
+
# dimension: dimension for the image (sample: 30x30 | x30 | 30x | 300x300?)
|
11
|
+
# formats: extensions permitted, sample: jpg,png,... or generic: images | videos | audios | documents (default *)
|
12
|
+
# remove_source: Boolean (delete source file after saved if this is true, default false)
|
13
|
+
# same_name: Boolean (save the file with the same name if defined true, else search for a non used name)
|
14
|
+
# versions: (String) Create addtional multiple versions of the image uploaded, sample: '300x300,505x350' ==> Will create two extra images with these dimensions
|
15
|
+
# sample "test.png", versions: '200x200,450x450' will generate: thumb/test-png_200x200.png, test-png_450x450.png
|
16
|
+
# thumb_size: String (redefine the dimensions of the thumbnail, sample: '100x100' ==> only for images)
|
17
|
+
# temporal_time: if great than 0 seconds, then this file will expire (removed) in that time (default: 0)
|
18
|
+
# To manage jobs, please check http://edgeguides.rubyonrails.org/active_job_basics.html
|
19
|
+
# Note: if you are using temporal_time, you will need to copy the file to another directory later
|
20
|
+
# sample: upload_file(params[:my_file], {formats: "images", folder: "temporal"})
|
21
|
+
# sample: upload_file(params[:my_file], {formats: "jpg,png,gif,mp3,mp4", temporal_time: 10.minutes, maximum: 10.megabytes})
|
22
|
+
def upload_file(uploaded_io, settings = {})
|
23
|
+
cached_name = uploaded_io.is_a?(ActionDispatch::Http::UploadedFile) ? uploaded_io.original_filename : nil
|
24
|
+
return {error: "File is empty", file: nil, size: nil} unless uploaded_io.present?
|
25
|
+
if uploaded_io.is_a?(String) && uploaded_io.match(/^https?:\/\//).present? # download url file
|
26
|
+
tmp = cama_tmp_upload(uploaded_io)
|
27
|
+
return tmp if tmp[:error].present?
|
28
|
+
settings[:remove_source] = true
|
29
|
+
uploaded_io = tmp[:file_path]
|
30
|
+
end
|
31
|
+
uploaded_io = File.open(uploaded_io) if uploaded_io.is_a?(String)
|
32
|
+
uploaded_io = File.open(cama_resize_upload(uploaded_io.path, settings[:dimension])) if settings[:dimension].present? # resize file into specific dimensions
|
33
|
+
|
34
|
+
settings = settings.to_sym
|
35
|
+
settings[:uploaded_io] = uploaded_io
|
36
|
+
settings = {
|
37
|
+
folder: "",
|
38
|
+
maximum: current_site.get_option('filesystem_max_size', 100).to_f.megabytes,
|
39
|
+
formats: "*",
|
40
|
+
generate_thumb: true,
|
41
|
+
temporal_time: 0,
|
42
|
+
filename: ((cached_name || uploaded_io.original_filename) rescue uploaded_io.path.split("/").last).cama_fix_filename,
|
43
|
+
file_size: File.size(uploaded_io.to_io),
|
44
|
+
remove_source: false,
|
45
|
+
same_name: false,
|
46
|
+
versions: '',
|
47
|
+
thumb_size: nil
|
48
|
+
}.merge(settings)
|
49
|
+
hooks_run("before_upload", settings)
|
50
|
+
res = {error: nil}
|
51
|
+
|
52
|
+
# formats validations
|
53
|
+
return {error: "#{ct("file_format_error")} (#{settings[:formats]})"} unless cama_uploader.class.validate_file_format(uploaded_io.path, settings[:formats])
|
54
|
+
|
55
|
+
# file size validations
|
56
|
+
if settings[:maximum] < settings[:file_size]
|
57
|
+
res[:error] = "#{ct("file_size_exceeded", default: "File size exceeded")} (#{number_to_human_size(settings[:maximum])})"
|
58
|
+
return res
|
59
|
+
end
|
60
|
+
# save file
|
61
|
+
key = File.join(settings[:folder], settings[:filename]).to_s.cama_fix_slash
|
62
|
+
res = cama_uploader.add_file(settings[:uploaded_io], key, {same_name: settings[:same_name]})
|
63
|
+
{} if settings[:temporal_time] > 0 # temporal file upload (always put as local for temporal files) (TODO: use delayjob)
|
64
|
+
|
65
|
+
# generate image versions
|
66
|
+
if res['file_type'] == 'image'
|
67
|
+
settings[:versions].to_s.gsub(' ', '').split(',').each do |v|
|
68
|
+
version_path = cama_resize_upload(settings[:uploaded_io].path, v, {replace: false})
|
69
|
+
cama_uploader.add_file(version_path, cama_uploader.version_path(res['key'], v), is_thumb: true, same_name: true)
|
70
|
+
FileUtils.rm_f(version_path)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# generate thumb
|
75
|
+
cama_uploader_generate_thumbnail(uploaded_io.path, res['key'], settings[:thumb_size], settings[:remove_source]) if settings[:generate_thumb] && res['thumb'].present?
|
76
|
+
FileUtils.rm_f(uploaded_io.path) if File.exist?(uploaded_io.path) if settings[:remove_source]
|
77
|
+
|
78
|
+
hooks_run('after_upload', settings)
|
79
|
+
res
|
80
|
+
end
|
81
|
+
|
82
|
+
# generate thumbnail of a existent image
|
83
|
+
# key: key of the current file
|
84
|
+
# the thumbnail will be saved in my_images/my_img.png => my_images/thumb/my_img.png
|
85
|
+
def cama_uploader_generate_thumbnail(uploaded_io, key, thumb_size = nil, remove_source = false)
|
86
|
+
w, h = cama_uploader.thumb[:w], cama_uploader.thumb[:h]
|
87
|
+
w, h = thumb_size.split('x') if thumb_size.present?
|
88
|
+
uploaded_io = File.open(uploaded_io) if uploaded_io.is_a?(String)
|
89
|
+
path_thumb = cama_resize_and_crop(uploaded_io.path, w, h)
|
90
|
+
thumb = cama_uploader.add_file(path_thumb, cama_uploader.version_path(key).sub('.svg', '.jpg'), is_thumb: true, same_name: true)
|
91
|
+
FileUtils.rm_f(path_thumb) if remove_source
|
92
|
+
thumb
|
93
|
+
end
|
94
|
+
|
95
|
+
# helper to find an available filename for file_path in that directory
|
96
|
+
# sample: uploader_verify_name("/var/www/my_image.jpg")
|
97
|
+
# return "/var/www/my_image_1.jpg" => if "/var/www/my_image.jpg" exist
|
98
|
+
# return "/var/www/my_image.jpg" => if "/var/www/my_image.jpg" doesn't exist
|
99
|
+
def uploader_verify_name(file_path)
|
100
|
+
dir, filename = File.dirname(file_path), File.basename(file_path).to_s.cama_fix_filename
|
101
|
+
files = Dir.entries(dir)
|
102
|
+
if files.include?(filename)
|
103
|
+
i, _filename = 1, filename
|
104
|
+
while files.include?(_filename) do
|
105
|
+
_filename = "#{File.basename(filename, File.extname(filename))}_#{i}#{File.extname(filename)}"
|
106
|
+
i += 1
|
107
|
+
end
|
108
|
+
filename = _filename
|
109
|
+
end
|
110
|
+
"#{File.dirname(file_path)}/#{filename}"
|
111
|
+
end
|
112
|
+
|
113
|
+
# convert downloaded file path into public url
|
114
|
+
def cama_file_path_to_url(file_path)
|
115
|
+
file_path.sub(Rails.public_path.to_s, (root_url rescue cama_root_url))
|
116
|
+
end
|
117
|
+
|
118
|
+
# convert public url to file path
|
119
|
+
def cama_url_to_file_path(url)
|
120
|
+
File.join(Rails.public_path, URI(url.to_s).path)
|
121
|
+
end
|
122
|
+
|
123
|
+
# crop and image and saved as imagename_crop.ext
|
124
|
+
# file: file path
|
125
|
+
# w: new width
|
126
|
+
# h: new height
|
127
|
+
# w_offset: left offset
|
128
|
+
# w_offset: top offset
|
129
|
+
# resize: true/false
|
130
|
+
# (true => resize the image to this dimension)
|
131
|
+
# (false => crop the image with this dimension)
|
132
|
+
# replace: Boolean (replace current image or create another file)
|
133
|
+
def cama_crop_image(file_path, w=nil, h=nil, w_offset = 0, h_offset = 0, resize = false , replace = true)
|
134
|
+
force = ""
|
135
|
+
force = "!" if w.present? && h.present? && !w.include?("?") && !h.include?("?")
|
136
|
+
img = MiniMagick::Image.open(file_path)
|
137
|
+
w = img[:width].to_f > w.sub('?', '').to_i ? w.sub('?', "") : img[:width] if w.present? && w.to_s.include?('?')
|
138
|
+
h = img[:height].to_f > h.sub('?', '').to_i ? h.sub('?', "") : img[:height] if h.present? && h.to_s.include?('?')
|
139
|
+
data = {img: img, w: w, h: h, w_offset: w_offset, h_offset: h_offset, resize: resize, replace: replace}; hooks_run("before_crop_image", data)
|
140
|
+
data[:img].combine_options do |i|
|
141
|
+
i.resize("#{w if w.present?}x#{h if h.present?}#{force}") if data[:resize]
|
142
|
+
i.crop "#{w if w.present?}x#{h if h.present?}+#{w_offset}+#{h_offset}#{force}" unless data[:resize]
|
143
|
+
end
|
144
|
+
|
145
|
+
res = file_path
|
146
|
+
unless data[:replace]
|
147
|
+
ext = File.extname(file_path)
|
148
|
+
res = file_path.gsub(ext, "_crop#{ext}")
|
149
|
+
end
|
150
|
+
data[:img].write res
|
151
|
+
res
|
152
|
+
end
|
153
|
+
|
154
|
+
# resize and crop a file
|
155
|
+
# SVGs are converted to JPEGs for editing
|
156
|
+
# Params:
|
157
|
+
# file: (String) File path
|
158
|
+
# w: (Integer) width
|
159
|
+
# h: (Integer) height
|
160
|
+
# settings:
|
161
|
+
# gravity: (Sym, default :north_east) Crop position: :north_west, :north, :north_east, :east, :south_east, :south, :south_west, :west, :center
|
162
|
+
# overwrite: (Boolean, default true) true for overwrite current image with resized resolutions, false: create other file called with prefix "crop_"
|
163
|
+
# output_name: (String, default prefixd name with crop_), permit to define the output name of the thumbnail if overwrite = true
|
164
|
+
# Return: (String) file path where saved this cropped
|
165
|
+
# sample: cama_resize_and_crop(my_file, 200, 200, {gravity: :north_east, overwrite: false})
|
166
|
+
def cama_resize_and_crop(file, w, h, settings = {})
|
167
|
+
settings = {gravity: :north_east, overwrite: true, output_name: ""}.merge(settings)
|
168
|
+
img = MiniMagick::Image.open(file)
|
169
|
+
if file.end_with? '.svg'
|
170
|
+
img.format 'jpg'
|
171
|
+
file.sub! '.svg', '.jpg'
|
172
|
+
settings[:output_name].sub!('.svg', '.jpg') if settings[:output_name]
|
173
|
+
end
|
174
|
+
w = img[:width].to_f > w.sub('?', '').to_i ? w.sub('?', "") : img[:width] if w.present? && w.to_s.include?('?')
|
175
|
+
h = img[:height].to_f > h.sub('?', '').to_i ? h.sub('?', "") : img[:height] if h.present? && h.to_s.include?('?')
|
176
|
+
w_original, h_original = [img[:width].to_f, img[:height].to_f]
|
177
|
+
w = w.to_i if w.present?
|
178
|
+
h = h.to_i if h.present?
|
179
|
+
|
180
|
+
# check proportions
|
181
|
+
if w_original * h < h_original * w
|
182
|
+
op_resize = "#{w.to_i}x"
|
183
|
+
w_result = w
|
184
|
+
h_result = (h_original * w / w_original)
|
185
|
+
else
|
186
|
+
op_resize = "x#{h.to_i}"
|
187
|
+
w_result = (w_original * h / h_original)
|
188
|
+
h_result = h
|
189
|
+
end
|
190
|
+
|
191
|
+
w_offset, h_offset = cama_crop_offsets_by_gravity(settings[:gravity], [w_result, h_result], [w, h])
|
192
|
+
data = {img: img, w: w, h: h, w_offset: w_offset, h_offset: h_offset, op_resize: op_resize, settings: settings}; hooks_run("before_resize_crop", data)
|
193
|
+
data[:img].combine_options do |i|
|
194
|
+
i.resize(data[:op_resize])
|
195
|
+
i.gravity(settings[:gravity])
|
196
|
+
i.crop "#{data[:w].to_i}x#{data[:h].to_i}+#{data[:w_offset]}+#{data[:h_offset]}!"
|
197
|
+
end
|
198
|
+
|
199
|
+
if settings[:overwrite]
|
200
|
+
data[:img].write(file.sub '.svg', '.jpg')
|
201
|
+
else
|
202
|
+
if settings[:output_name].present?
|
203
|
+
data[:img].write(file = File.join(File.dirname(file), settings[:output_name]).to_s)
|
204
|
+
else
|
205
|
+
data[:img].write(file = uploader_verify_name(File.join(File.dirname(file), "crop_#{File.basename(file.sub '.svg', '.jpg')}")))
|
206
|
+
end
|
207
|
+
end
|
208
|
+
file
|
209
|
+
end
|
210
|
+
|
211
|
+
# upload tmp file
|
212
|
+
# support for url and local path
|
213
|
+
# sample:
|
214
|
+
# cama_tmp_upload('http://camaleon.tuzitio.com/media/132/logo2.png') ==> /var/rails/my_project/public/tmp/1/logo2.png
|
215
|
+
# cama_tmp_upload('/var/www/media/132/logo 2.png') ==> /var/rails/my_project/public/tmp/1/logo-2.png
|
216
|
+
# accept args:
|
217
|
+
# name: to indicate the name to use, sample: cama_tmp_upload('/var/www/media/132/logo 2.png', {name: 'owen.png', formats: 'images'})
|
218
|
+
# formats: extensions permitted, sample: jpg,png,... or generic: images | videos | audios | documents (default *)
|
219
|
+
# dimension: 20x30
|
220
|
+
# return: {file_path, error}
|
221
|
+
def cama_tmp_upload(uploaded_io, args = {})
|
222
|
+
tmp_path = args[:path] || File.join(Rails.public_path, "tmp", current_site.id.to_s).to_s
|
223
|
+
FileUtils.mkdir_p(tmp_path) unless Dir.exist?(tmp_path)
|
224
|
+
saved = false
|
225
|
+
if uploaded_io.is_a?(String) && (uploaded_io.start_with?("data:")) # create tmp file using base64 format
|
226
|
+
_tmp_name = args[:name]
|
227
|
+
return {error: "#{cama_t("camaleon_cms.admin.media.name_required")}"} unless params[:name].present?
|
228
|
+
return {error: "#{ct("file_format_error")} (#{args[:formats]})"} unless cama_uploader.class.validate_file_format(_tmp_name, args[:formats])
|
229
|
+
path = uploader_verify_name(File.join(tmp_path, _tmp_name))
|
230
|
+
File.open(path, 'wb'){|f| f.write(Base64.decode64(uploaded_io.split(';base64,').last)) }
|
231
|
+
uploaded_io = File.open(path)
|
232
|
+
saved = true
|
233
|
+
elsif uploaded_io.is_a?(String) && (uploaded_io.start_with?("http://") || uploaded_io.start_with?("https://"))
|
234
|
+
return {error: "#{ct("file_format_error")} (#{args[:formats]})"} unless cama_uploader.class.validate_file_format(uploaded_io, args[:formats])
|
235
|
+
uploaded_io = File.join(Rails.public_path, uploaded_io.sub(current_site.the_url(locale: nil), '')).to_s if uploaded_io.include?(current_site.the_url(locale: nil)) # local file
|
236
|
+
_tmp_name = uploaded_io.split("/").last.split('?').first; args[:name] = args[:name] || _tmp_name
|
237
|
+
uploaded_io = open(uploaded_io)
|
238
|
+
end
|
239
|
+
uploaded_io = File.open(uploaded_io) if uploaded_io.is_a?(String)
|
240
|
+
return {error: "#{ct("file_format_error")} (#{args[:formats]})"} unless cama_uploader.class.validate_file_format(_tmp_name || uploaded_io.path, args[:formats])
|
241
|
+
return {error: "#{ct("file_size_exceeded", default: "File size exceeded")} (#{number_to_human_size(args[:maximum])})"} if args[:maximum].present? && args[:maximum] < (uploaded_io.size rescue File.size(uploaded_io))
|
242
|
+
name = args[:name] || uploaded_io.try(:original_filename) || uploaded_io.path.split("/").last; name = "#{File.basename(name, File.extname(name)).underscore}#{File.extname(name)}"
|
243
|
+
path ||= uploader_verify_name(File.join(tmp_path, name))
|
244
|
+
File.open(path, "wb"){|f| f.write(uploaded_io.read) } unless saved
|
245
|
+
path = cama_resize_upload(path, args[:dimension]) if args[:dimension].present?
|
246
|
+
{file_path: path, error: nil}
|
247
|
+
end
|
248
|
+
|
249
|
+
# resize image if the format is correct
|
250
|
+
# return resized file path
|
251
|
+
def cama_resize_upload(image_path, dimesion, args = {})
|
252
|
+
if cama_uploader.class.validate_file_format(image_path, 'image') && dimesion.present?
|
253
|
+
r= {file: image_path, w: dimesion.split('x')[0], h: dimesion.split('x')[1], w_offset: 0, h_offset: 0, resize: !dimesion.split('x')[2] || dimesion.split('x')[2] == "resize", replace: true, gravity: :north_east}.merge(args); hooks_run("on_uploader_resize", r)
|
254
|
+
if r[:w].present? && r[:h].present?
|
255
|
+
image_path = cama_resize_and_crop(r[:file], r[:w], r[:h], {overwrite: r[:replace], gravity: r[:gravity] })
|
256
|
+
else
|
257
|
+
image_path = cama_crop_image(r[:file], r[:w], r[:h], r[:w_offset], r[:h_offset], r[:resize] , r[:replace])
|
258
|
+
end
|
259
|
+
end
|
260
|
+
image_path
|
261
|
+
end
|
262
|
+
|
263
|
+
# return the current uploader
|
264
|
+
def cama_uploader
|
265
|
+
@cama_uploader ||= lambda{
|
266
|
+
thumb = current_site.get_option('filesystem_thumb_size', '100x100').split('x')
|
267
|
+
args= {
|
268
|
+
server: current_site.get_option("filesystem_type", "local").downcase,
|
269
|
+
thumb: {w: thumb[0], h: thumb[1]},
|
270
|
+
aws_settings: {
|
271
|
+
region: current_site.get_option("filesystem_region", 'us-west-2'),
|
272
|
+
access_key: current_site.get_option("filesystem_s3_access_key"),
|
273
|
+
secret_key: current_site.get_option("filesystem_s3_secret_key"),
|
274
|
+
bucket: current_site.get_option("filesystem_s3_bucket_name"),
|
275
|
+
cloud_front: current_site.get_option("filesystem_s3_cloudfront"),
|
276
|
+
aws_file_upload_settings: lambda{|settings| settings }, # permit to add your custom attributes for file_upload http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Object.html#upload_file-instance_method
|
277
|
+
aws_file_read_settings: lambda{|data, s3_file| data } # permit to read custom attributes from aws file and add to file parsed object
|
278
|
+
},
|
279
|
+
custom_uploader: nil # posibility to use custom file uploader
|
280
|
+
}
|
281
|
+
hooks_run("on_uploader", args)
|
282
|
+
return args[:custom_uploader] if args[:custom_uploader].present?
|
283
|
+
|
284
|
+
case args[:server]
|
285
|
+
when 's3', 'aws'
|
286
|
+
CamaleonCmsAwsUploader.new({current_site: current_site, thumb: args[:thumb], aws_settings: args[:aws_settings]}, self)
|
287
|
+
else
|
288
|
+
CamaleonCmsLocalUploader.new({current_site: current_site, thumb: args[:thumb]}, self)
|
289
|
+
end
|
290
|
+
}.call
|
291
|
+
end
|
292
|
+
|
293
|
+
def slugify(val)
|
294
|
+
val.to_s.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
|
295
|
+
end
|
296
|
+
|
297
|
+
def slugify_folder(val)
|
298
|
+
splitted_folder = val.split('/')
|
299
|
+
splitted_folder[-1] = slugify(splitted_folder.last)
|
300
|
+
splitted_folder.join('/')
|
301
|
+
end
|
302
|
+
|
303
|
+
private
|
304
|
+
# helper for resize and crop method
|
305
|
+
def cama_crop_offsets_by_gravity(gravity, original_dimensions, cropped_dimensions)
|
306
|
+
original_width, original_height = original_dimensions
|
307
|
+
cropped_width, cropped_height = cropped_dimensions
|
308
|
+
|
309
|
+
vertical_offset = case gravity
|
310
|
+
when :north_west, :north, :north_east then 0
|
311
|
+
when :center, :east, :west then [ ((original_height - cropped_height) / 2.0).to_i, 0 ].max
|
312
|
+
when :south_west, :south, :south_east then (original_height - cropped_height).to_i
|
313
|
+
end
|
314
|
+
|
315
|
+
horizontal_offset = case gravity
|
316
|
+
when :north_west, :west, :south_west then 0
|
317
|
+
when :center, :north, :south then [ ((original_width - cropped_width) / 2.0).to_i, 0 ].max
|
318
|
+
when :north_east, :east, :south_east then (original_width - cropped_width).to_i
|
319
|
+
end
|
320
|
+
|
321
|
+
return [ horizontal_offset, vertical_offset ]
|
322
|
+
end
|
323
|
+
|
324
|
+
# convert file path into thumb path format
|
325
|
+
# return the image name into thumb format: owewen.png into thumb/owen-png.png
|
326
|
+
def cama_parse_for_thumb_name(file_path)
|
327
|
+
"#{@fog_connection_hook_res[:thumb_folder_name]}/#{File.basename(file_path).parameterize}#{File.extname(file_path)}"
|
328
|
+
end
|
329
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
module CamaleonCms::UserRolesHelper
|
3
|
+
def cama_get_roles_values
|
4
|
+
@_cache_cama_get_roles_values ||= lambda{
|
5
|
+
roles_list = CamaleonCms::UserRole::ROLES
|
6
|
+
# permit to add custom roles to be listed in editing roles form
|
7
|
+
# sample: args[:roles_list][:manager] << { key: 'my_role_key', label: "my_custom_permission", description: "lorem ipsum"}
|
8
|
+
# authorize! :manage, :my_role_key
|
9
|
+
args = {roles_list: roles_list}; hooks_run("available_user_roles_list", args)
|
10
|
+
args[:roles_list]
|
11
|
+
}.call
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
class CamaleonCms::HtmlMailer < ActionMailer::Base
|
2
|
+
include CamaleonCms::SiteHelper
|
3
|
+
include CamaleonCms::HooksHelper
|
4
|
+
include CamaleonCms::PluginsHelper
|
5
|
+
#include ApplicationHelper
|
6
|
+
default from: "Camaleon CMS <owenperedo@gmail.com>"
|
7
|
+
after_action :set_delivery_options
|
8
|
+
|
9
|
+
# content='', from=nil, attachs=[], url_base='', current_site, template_name, layout_name, extra_data, format, cc_to
|
10
|
+
def sender(email, subject='Hello', data = {})
|
11
|
+
data = data.to_sym
|
12
|
+
if data[:current_site].present?
|
13
|
+
if data[:current_site].is_a?(Integer)
|
14
|
+
data[:current_site] = CamaleonCms::Site.find(data[:current_site]).decorate
|
15
|
+
end
|
16
|
+
else
|
17
|
+
data[:current_site] = CamaleonCms::Site.main_site.decorate
|
18
|
+
end
|
19
|
+
@current_site = data[:current_site]
|
20
|
+
data = {
|
21
|
+
cc_to: @current_site.get_option("email_cc", '').split(','),
|
22
|
+
from: @current_site.get_option("email_from") || @current_site.get_option("email"),
|
23
|
+
template_name: 'mailer',
|
24
|
+
layout_name: 'camaleon_cms/mailer',
|
25
|
+
format: 'html',
|
26
|
+
}.merge(data)
|
27
|
+
data[:cc_to] = [data[:cc_to]] if data[:cc_to].is_a?(String) || !data[:cc_to].present?
|
28
|
+
|
29
|
+
mail_data = {to: email, subject: subject}
|
30
|
+
if @current_site.get_option("mailer_enabled") == 1
|
31
|
+
mail_data[:delivery_method] = :smtp
|
32
|
+
mail_data[:delivery_method_options] = {
|
33
|
+
user_name: @current_site.get_option("email_username"),
|
34
|
+
password: @current_site.get_option("email_pass"),
|
35
|
+
address: @current_site.get_option("email_server"),
|
36
|
+
port: @current_site.get_option("email_port"),
|
37
|
+
domain: (@current_site.the_url.to_s.parse_domain rescue "localhost"),
|
38
|
+
authentication: "plain",
|
39
|
+
enable_starttls_auto: true,
|
40
|
+
}
|
41
|
+
end
|
42
|
+
mail_data[:cc] = data[:cc_to].clean_empty.join(",") if data[:cc_to].present?
|
43
|
+
mail_data[:from] = data[:from] if data[:from].present?
|
44
|
+
|
45
|
+
data[:mail_data] = mail_data
|
46
|
+
hooks_run('email_late', data)
|
47
|
+
|
48
|
+
@subject = subject
|
49
|
+
@html = data[:content]
|
50
|
+
@url_base = data[:url_base]
|
51
|
+
@extra_data = data[:extra_data]
|
52
|
+
|
53
|
+
views_dir = "app/apps/"
|
54
|
+
self.prepend_view_path(File.join($camaleon_engine_dir, views_dir).to_s)
|
55
|
+
self.prepend_view_path(Rails.root.join(views_dir).to_s)
|
56
|
+
|
57
|
+
theme = @current_site.get_theme
|
58
|
+
lookup_context.prefixes.prepend("themes/#{theme.slug}") if theme.settings["gem_mode"]
|
59
|
+
lookup_context.prefixes.prepend("themes/#{theme.slug}/views") unless theme.settings["gem_mode"]
|
60
|
+
lookup_context.use_camaleon_partial_prefixes = true
|
61
|
+
((data[:files] || []) + (data[:attachments] || [])).each{ |attach|
|
62
|
+
if File.exist?(attach) && !File.directory?(attach)
|
63
|
+
attachments["#{File.basename(attach)}"] = File.open(attach, 'rb') { |f| f.read }
|
64
|
+
else
|
65
|
+
Rails.logger.error "Camaleon CMS - File attached in the email doesn't exist: #{attach}".cama_log_style(:red)
|
66
|
+
end
|
67
|
+
}
|
68
|
+
|
69
|
+
layout = data[:layout_name].present? ? data[:layout_name] : false
|
70
|
+
if data[:template_name].present? # render email with template
|
71
|
+
mail(mail_data) { |format| format.html { render data[:template_name], layout: layout } } if data[:format] == "html"
|
72
|
+
mail(mail_data) { |format| format.text { render data[:template_name], layout: layout } } if data[:format] == "txt"
|
73
|
+
else # inline render content
|
74
|
+
mail(mail_data) { |format| format.html { render inline: @html, layout: layout } } if data[:format] == "html"
|
75
|
+
mail(mail_data) { |format| format.text { render inline: @html, layout: layout } } if data[:format] == "txt"
|
76
|
+
end
|
77
|
+
mail(mail_data) unless data[:format].present?
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
# set default settings configured on admin panel
|
82
|
+
def set_delivery_options
|
83
|
+
if @current_site.get_option("mailer_enabled") == 1
|
84
|
+
mail.perform_deliveries = true
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|