publify_core 9.0.0.pre6 → 9.2.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of publify_core might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/CHANGELOG.md +103 -8
- data/README.md +9 -0
- data/app/assets/javascripts/bootstrap-sprockets.js +8 -0
- data/app/assets/javascripts/bootstrap/affix.js +164 -0
- data/app/assets/javascripts/bootstrap/alert.js +95 -0
- data/app/assets/javascripts/bootstrap/button.js +125 -0
- data/app/assets/javascripts/bootstrap/collapse.js +212 -0
- data/app/assets/javascripts/bootstrap/dropdown.js +165 -0
- data/app/assets/javascripts/bootstrap/modal.js +358 -0
- data/app/assets/javascripts/bootstrap/tab.js +155 -0
- data/app/assets/javascripts/bootstrap/transition.js +59 -0
- data/app/assets/javascripts/lightbox.js +4 -4
- data/app/assets/javascripts/publify_admin.js +1 -35
- data/app/assets/stylesheets/_bootstrap-compass.scss +9 -0
- data/app/assets/stylesheets/_bootstrap-mincer.scss +19 -0
- data/app/assets/stylesheets/_bootstrap-sprockets.scss +9 -0
- data/app/assets/stylesheets/_bootstrap.scss +42 -0
- data/app/assets/stylesheets/administration_structure.css.scss +1 -45
- data/app/assets/stylesheets/bootstrap/_alerts.scss +73 -0
- data/app/assets/stylesheets/bootstrap/_button-groups.scss +242 -0
- data/app/assets/stylesheets/bootstrap/_buttons.scss +168 -0
- data/app/assets/stylesheets/bootstrap/_close.scss +37 -0
- data/app/assets/stylesheets/bootstrap/_code.scss +69 -0
- data/app/assets/stylesheets/bootstrap/_component-animations.scss +38 -0
- data/app/assets/stylesheets/bootstrap/_dropdowns.scss +213 -0
- data/app/assets/stylesheets/bootstrap/_forms.scss +586 -0
- data/app/assets/stylesheets/bootstrap/_grid.scss +94 -0
- data/app/assets/stylesheets/bootstrap/_labels.scss +66 -0
- data/app/assets/stylesheets/bootstrap/_media.scss +66 -0
- data/app/assets/stylesheets/bootstrap/_mixins.scss +37 -0
- data/app/assets/stylesheets/bootstrap/_modals.scss +150 -0
- data/app/assets/stylesheets/bootstrap/_navbar.scss +479 -0
- data/app/assets/stylesheets/bootstrap/_navs.scss +242 -0
- data/app/assets/stylesheets/bootstrap/_normalize.scss +427 -0
- data/app/assets/stylesheets/bootstrap/_pagination.scss +86 -0
- data/app/assets/stylesheets/bootstrap/_panels.scss +222 -0
- data/app/assets/stylesheets/bootstrap/_print.scss +99 -0
- data/app/assets/stylesheets/bootstrap/_scaffolding.scss +160 -0
- data/app/assets/stylesheets/bootstrap/_tables.scss +234 -0
- data/app/assets/stylesheets/bootstrap/_theme.scss +224 -0
- data/app/assets/stylesheets/bootstrap/_type.scss +296 -0
- data/app/assets/stylesheets/bootstrap/_utilities.scss +55 -0
- data/app/assets/stylesheets/bootstrap/_variables.scss +638 -0
- data/app/assets/stylesheets/bootstrap/_wells.scss +29 -0
- data/app/assets/stylesheets/bootstrap/mixins/_alerts.scss +15 -0
- data/app/assets/stylesheets/bootstrap/mixins/_background-variant.scss +12 -0
- data/app/assets/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
- data/app/assets/stylesheets/bootstrap/mixins/_buttons.scss +56 -0
- data/app/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
- data/app/assets/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
- data/app/assets/stylesheets/bootstrap/mixins/_forms.scss +82 -0
- data/app/assets/stylesheets/bootstrap/mixins/_gradients.scss +56 -0
- data/app/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +81 -0
- data/app/assets/stylesheets/bootstrap/mixins/_grid.scss +122 -0
- data/app/assets/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
- data/app/assets/stylesheets/bootstrap/mixins/_image.scss +28 -0
- data/app/assets/stylesheets/bootstrap/mixins/_labels.scss +12 -0
- data/app/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
- data/app/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
- data/app/assets/stylesheets/bootstrap/mixins/_opacity.scss +7 -0
- data/app/assets/stylesheets/bootstrap/mixins/_pagination.scss +24 -0
- data/app/assets/stylesheets/bootstrap/mixins/_panels.scss +20 -0
- data/app/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
- data/app/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
- data/app/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +17 -0
- data/app/assets/stylesheets/bootstrap/mixins/_size.scss +10 -0
- data/app/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
- data/app/assets/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
- data/app/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +12 -0
- data/app/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
- data/app/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +222 -0
- data/app/assets/stylesheets/lightbox.css +3 -3
- data/app/assets/stylesheets/publify_admin.css.scss +0 -1
- data/app/controllers/accounts_controller.rb +2 -0
- data/app/controllers/admin/base_controller.rb +8 -22
- data/app/controllers/admin/content_controller.rb +69 -48
- data/app/controllers/admin/dashboard_controller.rb +20 -74
- data/app/controllers/admin/feedback_controller.rb +45 -36
- data/app/controllers/admin/notes_controller.rb +16 -10
- data/app/controllers/admin/pages_controller.rb +20 -34
- data/app/controllers/admin/post_types_controller.rb +7 -5
- data/app/controllers/admin/profiles_controller.rb +15 -5
- data/app/controllers/admin/redirects_controller.rb +9 -5
- data/app/controllers/admin/resources_controller.rb +7 -4
- data/app/controllers/admin/seo_controller.rb +12 -10
- data/app/controllers/admin/settings_controller.rb +7 -5
- data/app/controllers/admin/sidebar_controller.rb +7 -5
- data/app/controllers/admin/tags_controller.rb +7 -3
- data/app/controllers/admin/themes_controller.rb +10 -7
- data/app/controllers/admin/users_controller.rb +10 -7
- data/app/controllers/articles_controller.rb +92 -81
- data/app/controllers/authors_controller.rb +6 -3
- data/app/controllers/base_controller.rb +9 -11
- data/app/controllers/comments_controller.rb +15 -16
- data/app/controllers/content_controller.rb +12 -19
- data/app/controllers/feedback_controller.rb +7 -39
- data/app/controllers/notes_controller.rb +6 -6
- data/app/controllers/setup_controller.rb +25 -26
- data/app/controllers/tags_controller.rb +16 -16
- data/app/controllers/text_controller.rb +2 -4
- data/app/controllers/textfilter_controller.rb +2 -0
- data/app/controllers/theme_controller.rb +23 -16
- data/app/controllers/xml_controller.rb +13 -59
- data/app/helpers/admin/base_helper.rb +28 -29
- data/app/helpers/admin/feedback_helper.rb +34 -24
- data/app/helpers/articles_helper.rb +4 -2
- data/app/helpers/authors_helper.rb +9 -18
- data/app/helpers/base_helper.rb +66 -55
- data/app/helpers/blog_helper.rb +4 -2
- data/app/helpers/xml_helper.rb +5 -3
- data/app/jobs/application_job.rb +4 -0
- data/app/mailers/notification_mailer.rb +5 -3
- data/app/models/ability.rb +25 -23
- data/app/models/archives_sidebar.rb +18 -18
- data/app/models/article.rb +84 -99
- data/app/models/article/factory.rb +14 -6
- data/app/models/blog.rb +98 -110
- data/app/models/comment.rb +14 -10
- data/app/models/config_manager.rb +4 -2
- data/app/models/content.rb +45 -61
- data/app/models/content_base.rb +7 -6
- data/app/models/feedback.rb +91 -65
- data/app/models/meta_sidebar.rb +5 -3
- data/app/models/note.rb +31 -23
- data/app/models/page.rb +16 -10
- data/app/models/page_sidebar.rb +4 -2
- data/app/models/ping.rb +2 -113
- data/app/models/post_type.rb +4 -3
- data/app/models/redirect.rb +13 -7
- data/app/models/redirection.rb +3 -1
- data/app/models/resource.rb +6 -22
- data/app/models/search_sidebar.rb +4 -2
- data/app/models/sidebar.rb +12 -7
- data/app/models/static_sidebar.rb +15 -13
- data/app/models/tag.rb +23 -15
- data/app/models/tag_sidebar.rb +10 -7
- data/app/models/text_filter.rb +85 -11
- data/app/models/trackback.rb +7 -18
- data/app/models/trigger.rb +8 -19
- data/app/models/user.rb +46 -52
- data/app/services/title_builder.rb +52 -45
- data/app/uploaders/resource_uploader.rb +35 -2
- data/app/views/accounts/confirm.html.erb +3 -4
- data/app/views/admin/content/_article_list.html.erb +24 -9
- data/app/views/admin/content/_form.html.erb +71 -51
- data/app/views/admin/content/autosave.js.erb +2 -2
- data/app/views/admin/content/edit.html.erb +1 -1
- data/app/views/admin/content/index.html.erb +25 -15
- data/app/views/admin/content/new.html.erb +2 -2
- data/app/views/admin/dashboard/_comment.html.erb +5 -5
- data/app/views/admin/dashboard/_comments.html.erb +2 -2
- data/app/views/admin/dashboard/_drafts.html.erb +5 -5
- data/app/views/admin/dashboard/_overview.html.erb +7 -9
- data/app/views/admin/dashboard/_welcome.html.erb +11 -11
- data/app/views/admin/dashboard/index.html.erb +12 -7
- data/app/views/admin/feedback/_button.html.erb +6 -6
- data/app/views/admin/feedback/_feedback.html.erb +3 -3
- data/app/views/admin/feedback/_ham.html.erb +27 -9
- data/app/views/admin/feedback/_spam.html.erb +26 -16
- data/app/views/admin/feedback/article.html.erb +20 -21
- data/app/views/admin/feedback/edit.html.erb +14 -15
- data/app/views/admin/feedback/{ham.js → ham.js.erb} +0 -0
- data/app/views/admin/feedback/index.html.erb +25 -23
- data/app/views/admin/feedback/{spam.js → spam.js.erb} +0 -0
- data/app/views/admin/migrations/show.html.erb +10 -11
- data/app/views/admin/notes/_form.html.erb +13 -13
- data/app/views/admin/notes/_list.html.erb +19 -8
- data/app/views/admin/notes/_note.html.erb +12 -7
- data/app/views/admin/notes/edit.html.erb +6 -1
- data/app/views/admin/notes/index.html.erb +5 -1
- data/app/views/admin/notes/show.html.erb +2 -2
- data/app/views/admin/pages/_form.html.erb +86 -77
- data/app/views/admin/pages/_pages.html.erb +11 -4
- data/app/views/admin/pages/edit.html.erb +3 -1
- data/app/views/admin/pages/index.html.erb +10 -6
- data/app/views/admin/pages/new.html.erb +3 -1
- data/app/views/admin/post_types/_index_and_form.html.erb +15 -16
- data/app/views/admin/post_types/edit.html.erb +1 -1
- data/app/views/admin/post_types/index.html.erb +1 -1
- data/app/views/admin/profiles/index.html.erb +2 -3
- data/app/views/admin/redirects/_index_and_form.html.erb +10 -11
- data/app/views/admin/redirects/edit.html.erb +1 -1
- data/app/views/admin/redirects/index.html.erb +1 -1
- data/app/views/admin/resources/index.html.erb +19 -16
- data/app/views/admin/seo/_general.html.erb +40 -59
- data/app/views/admin/seo/_permalinks.html.erb +17 -17
- data/app/views/admin/seo/_titles.html.erb +81 -82
- data/app/views/admin/seo/show.html.erb +14 -19
- data/app/views/admin/settings/display.html.erb +42 -52
- data/app/views/admin/settings/feedback.html.erb +59 -67
- data/app/views/admin/settings/index.html.erb +30 -31
- data/app/views/admin/settings/write.html.erb +27 -46
- data/app/views/admin/shared/_edit.html.erb +3 -3
- data/app/views/admin/shared/_menu.html.erb +26 -26
- data/app/views/admin/shared/_twitter_alert.html.erb +1 -1
- data/app/views/admin/sidebar/_config.html.erb +5 -5
- data/app/views/admin/sidebar/_target_sidebar.html.erb +4 -4
- data/app/views/admin/sidebar/index.html.erb +7 -7
- data/app/views/admin/tags/_index_and_form.html.erb +11 -12
- data/app/views/admin/tags/edit.html.erb +1 -1
- data/app/views/admin/tags/index.html.erb +1 -1
- data/app/views/admin/themes/index.html.erb +5 -6
- data/app/views/admin/users/_form.html.erb +34 -34
- data/app/views/admin/users/edit.html.erb +2 -2
- data/app/views/admin/users/index.html.erb +10 -12
- data/app/views/admin/users/new.html.erb +2 -2
- data/app/views/archives_sidebar/_content.html.erb +2 -2
- data/app/views/articles/_archives_article.html.erb +9 -0
- data/app/views/articles/_article.html.erb +9 -9
- data/app/views/articles/_article_author.html.erb +4 -0
- data/app/views/articles/_article_collection.html.erb +1 -1
- data/app/views/articles/_article_content.html.erb +2 -2
- data/app/views/articles/_article_excerpt.html.erb +11 -9
- data/app/views/articles/_article_links.html.erb +5 -3
- data/app/views/articles/_comment_errors.html.erb +1 -1
- data/app/views/articles/_comment_form.html.erb +12 -12
- data/app/views/articles/_comment_list.html.erb +5 -5
- data/app/views/articles/_comment_preview.html.erb +3 -3
- data/app/views/articles/_full_article_content.html.erb +4 -2
- data/app/views/articles/_password_form.html.erb +4 -4
- data/app/views/articles/_trackback.html.erb +2 -2
- data/app/views/articles/archives.html.erb +11 -21
- data/app/views/articles/feedback_atom_feed.atom.builder +7 -5
- data/app/views/articles/feedback_rss_feed.rss.builder +11 -11
- data/app/views/articles/index_atom_feed.atom.builder +5 -4
- data/app/views/articles/index_rss_feed.rss.builder +8 -8
- data/app/views/articles/live_search.html.erb +3 -3
- data/app/views/articles/read.html.erb +19 -37
- data/app/views/articles/search.html.erb +3 -3
- data/app/views/articles/trackback.xml.builder +3 -1
- data/app/views/articles/view_page.html.erb +2 -2
- data/app/views/authors/show.html.erb +18 -28
- data/app/views/authors/show_atom_feed.atom.builder +5 -4
- data/app/views/authors/show_rss_feed.rss.builder +8 -8
- data/app/views/comments/_comment.html.erb +17 -16
- data/app/views/devise/mailer/reset_password_instructions.html.erb +7 -9
- data/app/views/devise/passwords/edit.html.erb +4 -4
- data/app/views/devise/passwords/new.html.erb +1 -1
- data/app/views/devise/registrations/new.html.erb +5 -5
- data/app/views/devise/sessions/new.html.erb +3 -3
- data/app/views/errors/404.html.erb +2 -2
- data/app/views/feedback/index.atom.builder +9 -0
- data/app/views/feedback/index.rss.builder +20 -0
- data/app/views/layouts/accounts.html.erb +26 -26
- data/app/views/layouts/administration.html.erb +31 -31
- data/app/views/layouts/default.html.erb +4 -3
- data/app/views/layouts/editor.html.erb +5 -19
- data/app/views/meta_sidebar/_content.html.erb +2 -2
- data/app/views/notes/_note.html.erb +16 -15
- data/app/views/notes/index.html.erb +2 -2
- data/app/views/notes/show_in_reply.html.erb +1 -1
- data/app/views/notification_mailer/_mail_footer.html.erb +3 -5
- data/app/views/notification_mailer/_mail_header.html.erb +2 -0
- data/app/views/notification_mailer/article.html.erb +5 -4
- data/app/views/notification_mailer/comment.html.erb +9 -8
- data/app/views/notification_mailer/notif_user.html.erb +4 -9
- data/app/views/page_sidebar/_content.html.erb +1 -1
- data/app/views/search_sidebar/_content.html.erb +2 -2
- data/app/views/settings/install.html.erb +2 -2
- data/app/views/setup/index.html.erb +9 -5
- data/app/views/shared/_atom_header.atom.builder +4 -4
- data/app/views/shared/_atom_item_article.atom.builder +19 -22
- data/app/views/shared/_atom_item_comment.atom.builder +5 -5
- data/app/views/shared/_atom_item_trackback.atom.builder +5 -4
- data/app/views/shared/_google_analytics.html.erb +8 -0
- data/app/views/shared/_page_header.html.erb +10 -13
- data/app/views/shared/_rss_item_article.rss.builder +12 -15
- data/app/views/shared/_rss_item_comment.rss.builder +2 -1
- data/app/views/shared/_rss_item_trackback.rss.builder +2 -0
- data/app/views/sidebar/display_plugins.html.erb +1 -1
- data/app/views/tag_sidebar/_content.html.erb +1 -1
- data/app/views/tags/index.html.erb +2 -2
- data/app/views/xml/_googlesitemap_item_article.googlesitemap.builder +2 -0
- data/app/views/xml/_googlesitemap_item_category.googlesitemap.builder +2 -0
- data/app/views/xml/_googlesitemap_item_page.googlesitemap.builder +2 -0
- data/app/views/xml/_googlesitemap_item_tag.googlesitemap.builder +2 -0
- data/app/views/xml/sitemap.googlesitemap.builder +9 -0
- data/config/i18n-tasks.yml +0 -5
- data/config/initializers/devise.rb +10 -4
- data/config/initializers/mime_types.rb +3 -2
- data/config/locales/da.yml +140 -108
- data/config/locales/de.yml +147 -111
- data/config/locales/en.yml +133 -102
- data/config/locales/es-MX.yml +141 -106
- data/config/locales/fr.yml +172 -122
- data/config/locales/he.yml +132 -105
- data/config/locales/it.yml +141 -108
- data/config/locales/ja.yml +115 -100
- data/config/locales/lt.yml +158 -110
- data/config/locales/nb-NO.yml +128 -101
- data/config/locales/nl.yml +147 -113
- data/config/locales/pl.yml +335 -275
- data/config/locales/pt-BR.yml +143 -107
- data/config/locales/ro.yml +155 -108
- data/config/locales/ru.yml +166 -105
- data/config/locales/zh-CN.yml +112 -96
- data/config/locales/zh-TW.yml +116 -99
- data/config/routes.rb +70 -87
- data/db/migrate/113_initial_schema.rb +6 -6
- data/db/migrate/114_fixes_buggy_articles_and_notes.rb +8 -6
- data/db/migrate/115_drops_categories_for_tags.rb +7 -6
- data/db/migrate/20150207131657_add_missing_indexes.rb +3 -1
- data/db/migrate/20150807134129_simplify_redirect_relations.rb +6 -1
- data/db/migrate/20150808052637_add_blog_ids.rb +11 -7
- data/db/migrate/20150808191127_add_blog_id_to_redirects.rb +3 -1
- data/db/migrate/20150810094754_add_blog_id_to_tags.rb +3 -1
- data/db/migrate/20160108111120_add_devise_to_users.rb +3 -1
- data/db/migrate/20160108184201_move_last_connection_to_last_sign_in_at.rb +3 -1
- data/db/migrate/20160110094906_remove_profiles_rights.rb +3 -1
- data/db/migrate/20160605103918_replace_profile_id_with_string.rb +3 -3
- data/db/migrate/20160605154632_remove_profiles.rb +12 -7
- data/db/migrate/20160701061851_demand_blog_id_on_contents.rb +3 -1
- data/db/migrate/20160701062604_add_blog_id_to_resources.rb +3 -1
- data/db/migrate/20170528093024_move_resources_to_content.rb +7 -0
- data/db/migrate/20170528094923_move_tags_to_content.rb +8 -0
- data/db/migrate/20170528201606_remove_separate_published_flag.rb +7 -0
- data/db/migrate/20170605071626_remove_extra_state_columns_from_feedback.rb +8 -0
- data/db/migrate/20170702105201_remove_published_at_from_feedback.rb +7 -0
- data/db/migrate/20190208151235_add_text_filter_name_fields.rb +9 -0
- data/db/migrate/20190208152646_move_text_filter_to_name.rb +97 -0
- data/db/migrate/20190209155717_remove_text_filter_ids.rb +19 -0
- data/db/migrate/20190209160610_remove_text_filters.rb +17 -0
- data/db/migrate/20200413140440_add_unique_indexes.rb +10 -0
- data/db/seeds.rb +8 -20
- data/lib/email_notify.rb +3 -1
- data/lib/format.rb +4 -12
- data/lib/publify_core.rb +36 -36
- data/lib/publify_core/engine.rb +11 -4
- data/lib/publify_core/lang.rb +5 -1
- data/lib/publify_core/testing_support/dns_mock.rb +15 -0
- data/lib/publify_core/testing_support/factories.rb +240 -0
- data/lib/publify_core/testing_support/feed_assertions.rb +48 -0
- data/lib/publify_core/testing_support/fixtures/exploit.svg +4 -0
- data/lib/publify_core/testing_support/fixtures/fakepng.png +1 -0
- data/lib/publify_core/testing_support/fixtures/otherfile.txt +1 -0
- data/lib/publify_core/testing_support/fixtures/testfile.png +0 -0
- data/lib/publify_core/testing_support/fixtures/testfile.txt +1 -0
- data/lib/publify_core/testing_support/upload_fixtures.rb +15 -0
- data/lib/publify_core/version.rb +3 -1
- data/lib/publify_guid.rb +4 -2
- data/lib/publify_plugins.rb +10 -5
- data/lib/publify_textfilter_markdown.rb +38 -25
- data/lib/publify_textfilter_none.rb +5 -3
- data/lib/publify_textfilter_smartypants.rb +5 -3
- data/lib/publify_textfilter_textile.rb +7 -4
- data/lib/publify_textfilter_twitterfilter.rb +13 -7
- data/lib/publify_time.rb +6 -2
- data/lib/sidebar_field.rb +29 -20
- data/lib/sidebar_registry.rb +5 -3
- data/lib/spam_protection.rb +19 -17
- data/lib/tasks/i18n.rake +9 -0
- data/lib/tasks/manifest.rake +30 -0
- data/lib/tasks/publify_core_tasks.rake +2 -0
- data/lib/text_filter_plugin.rb +30 -29
- data/lib/theme.rb +5 -5
- data/lib/transforms.rb +22 -20
- data/{app/assets/stylesheets/publify_core/.keep → themes/plain/javascripts/theme.js} +0 -0
- metadata +304 -130
- data/.gitignore +0 -13
- data/.rspec +0 -2
- data/.rubocop.yml +0 -84
- data/.rubocop_todo.yml +0 -148
- data/.travis.yml +0 -27
- data/Gemfile +0 -17
- data/README.rdoc +0 -3
- data/Rakefile +0 -35
- data/app/assets/javascripts/widearea.js +0 -486
- data/app/assets/stylesheets/widearea.css +0 -133
- data/app/controllers/.keep +0 -0
- data/app/controllers/admin/migrations_controller.rb +0 -19
- data/app/controllers/admin/textfilters_controller.rb +0 -6
- data/app/controllers/concerns/.keep +0 -0
- data/app/controllers/trackbacks_controller.rb +0 -36
- data/app/helpers/.keep +0 -0
- data/app/mailers/.keep +0 -0
- data/app/models/.keep +0 -0
- data/app/models/article/states.rb +0 -179
- data/app/models/concerns/.keep +0 -0
- data/app/models/feedback/states.rb +0 -256
- data/app/services/migrator.rb +0 -25
- data/app/views/.keep +0 -0
- data/app/views/admin/dashboard/_inbound.html.erb +0 -31
- data/app/views/admin/notes/_header.html.erb +0 -6
- data/app/views/articles/_protected_article_content.html.erb +0 -6
- data/app/views/comments/index.html.erb +0 -1
- data/app/views/comments/index_atom_feed.atom.builder +0 -8
- data/app/views/comments/index_rss_feed.rss.builder +0 -20
- data/app/views/trackbacks/index_atom_feed.atom.builder +0 -7
- data/app/views/trackbacks/index_rss_feed.rss.builder +0 -20
- data/app/views/trackbacks/trackback.xml.builder +0 -4
- data/app/views/xml/feed.googlesitemap.builder +0 -7
- data/app/views/xml/rsd.rsd.builder +0 -8
- data/lib/stateful.rb +0 -106
- data/publify_core.gemspec +0 -54
@@ -44,14 +44,14 @@
|
|
44
44
|
opacity: 1;
|
45
45
|
}
|
46
46
|
|
47
|
-
.ekko-lightbox .
|
47
|
+
.ekko-lightbox .chevron-left {
|
48
48
|
left: 0;
|
49
49
|
float: left;
|
50
50
|
padding-left: 15px;
|
51
51
|
text-align: left;
|
52
52
|
}
|
53
53
|
|
54
|
-
.ekko-lightbox .
|
54
|
+
.ekko-lightbox .chevron-right {
|
55
55
|
right: 0;
|
56
56
|
float: right;
|
57
57
|
padding-right: 15px;
|
@@ -60,4 +60,4 @@
|
|
60
60
|
|
61
61
|
.ekko-lightbox .modal-footer {
|
62
62
|
text-align: left;
|
63
|
-
}
|
63
|
+
}
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Admin::BaseController < BaseController
|
2
4
|
rescue_from CanCan::AccessDenied do |exception|
|
3
5
|
redirect_to admin_dashboard_path, alert: exception.message
|
@@ -5,37 +7,21 @@ class Admin::BaseController < BaseController
|
|
5
7
|
|
6
8
|
cattr_accessor :look_for_migrations
|
7
9
|
@@look_for_migrations = true
|
8
|
-
layout
|
10
|
+
layout "administration"
|
9
11
|
|
10
12
|
before_action :login_required, except: [:login, :signup]
|
11
|
-
before_action :look_for_needed_db_updates, except: [:login, :signup]
|
12
13
|
|
13
14
|
private
|
14
15
|
|
15
|
-
def update_settings_with!(settings_param)
|
16
|
-
Blog.transaction do
|
17
|
-
settings_param.each { |k, v| this_blog.send("#{k}=", v) }
|
18
|
-
if this_blog.save
|
19
|
-
flash[:success] = I18n.t('admin.settings.update.success')
|
20
|
-
else
|
21
|
-
flash[:error] = I18n.t('admin.settings.update.error', messages: this_blog.errors.full_messages.join(', '))
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
16
|
def destroy_a(klass_to_destroy)
|
27
17
|
@record = klass_to_destroy.find(params[:id])
|
28
18
|
if @record.respond_to?(:access_by?) && !@record.access_by?(current_user)
|
29
|
-
flash[:error] = I18n.t(
|
30
|
-
return(redirect_to action:
|
19
|
+
flash[:error] = I18n.t("admin.base.not_allowed")
|
20
|
+
return(redirect_to action: "index")
|
31
21
|
end
|
32
22
|
@record.destroy
|
33
|
-
flash[:notice] = I18n.t(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
def look_for_needed_db_updates
|
38
|
-
migrator = Migrator.new
|
39
|
-
redirect_to admin_migrations_path if migrator.migrations_pending?
|
23
|
+
flash[:notice] = I18n.t("admin.base.successfully_deleted",
|
24
|
+
name: controller_name.humanize)
|
25
|
+
redirect_to action: "index"
|
40
26
|
end
|
41
27
|
end
|
@@ -1,13 +1,14 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "base64"
|
2
4
|
|
3
5
|
module Admin; end
|
4
6
|
|
5
7
|
class Admin::ContentController < Admin::BaseController
|
6
|
-
layout :get_layout
|
7
|
-
|
8
8
|
def index
|
9
|
-
@search = params[:search]
|
10
|
-
@articles = this_blog.articles.search_with(@search).page(params[:page]).
|
9
|
+
@search = params[:search] || {}
|
10
|
+
@articles = this_blog.articles.search_with(@search).page(params[:page]).
|
11
|
+
per(this_blog.admin_display_elements)
|
11
12
|
|
12
13
|
if request.xhr?
|
13
14
|
respond_to do |format|
|
@@ -21,14 +22,17 @@ class Admin::ContentController < Admin::BaseController
|
|
21
22
|
def new
|
22
23
|
@article = Article::Factory.new(this_blog, current_user).default
|
23
24
|
load_resources
|
25
|
+
render layout: "editor"
|
24
26
|
end
|
25
27
|
|
26
28
|
def edit
|
27
29
|
return unless access_granted?(params[:id])
|
30
|
+
|
28
31
|
@article = Article.find(params[:id])
|
29
|
-
@article.text_filter ||=
|
32
|
+
@article.text_filter ||= default_text_filter
|
30
33
|
@article.keywords = Tag.collection_to_string @article.tags
|
31
34
|
load_resources
|
35
|
+
render layout: "editor"
|
32
36
|
end
|
33
37
|
|
34
38
|
def create
|
@@ -37,37 +41,50 @@ class Admin::ContentController < Admin::BaseController
|
|
37
41
|
|
38
42
|
update_article_attributes
|
39
43
|
|
44
|
+
if @article.draft
|
45
|
+
@article.state = "draft"
|
46
|
+
elsif @article.draft?
|
47
|
+
@article.publish!
|
48
|
+
end
|
49
|
+
|
40
50
|
if @article.save
|
41
|
-
flash[:success] = I18n.t(
|
42
|
-
redirect_to action:
|
51
|
+
flash[:success] = I18n.t("admin.content.create.success")
|
52
|
+
redirect_to action: "index"
|
43
53
|
else
|
44
54
|
@article.keywords = Tag.collection_to_string @article.tags
|
45
55
|
load_resources
|
46
|
-
render
|
56
|
+
render "new", layout: "editor"
|
47
57
|
end
|
48
58
|
end
|
49
59
|
|
50
60
|
def update
|
51
61
|
return unless access_granted?(params[:id])
|
62
|
+
|
52
63
|
id = params[:article][:id] || params[:id]
|
53
64
|
@article = Article.find(id)
|
54
65
|
|
55
66
|
if params[:article][:draft]
|
56
|
-
|
67
|
+
fetch_fresh_or_existing_draft_for_article
|
57
68
|
else
|
58
69
|
@article = Article.find(@article.parent_id) unless @article.parent_id.nil?
|
59
70
|
end
|
60
71
|
|
61
72
|
update_article_attributes
|
62
73
|
|
74
|
+
if @article.draft
|
75
|
+
@article.state = "draft"
|
76
|
+
elsif @article.draft?
|
77
|
+
@article.publish!
|
78
|
+
end
|
79
|
+
|
63
80
|
if @article.save
|
64
81
|
Article.where(parent_id: @article.id).map(&:destroy) unless @article.draft
|
65
|
-
flash[:success] = I18n.t(
|
66
|
-
redirect_to action:
|
82
|
+
flash[:success] = I18n.t("admin.content.update.success")
|
83
|
+
redirect_to action: "index"
|
67
84
|
else
|
68
85
|
@article.keywords = Tag.collection_to_string @article.tags
|
69
86
|
load_resources
|
70
|
-
render
|
87
|
+
render "edit"
|
71
88
|
end
|
72
89
|
end
|
73
90
|
|
@@ -88,24 +105,26 @@ class Admin::ContentController < Admin::BaseController
|
|
88
105
|
article_factory = Article::Factory.new(this_blog, current_user)
|
89
106
|
@article = article_factory.get_or_build_from(id)
|
90
107
|
|
91
|
-
|
108
|
+
fetch_fresh_or_existing_draft_for_article
|
92
109
|
|
93
110
|
@article.attributes = params[:article].permit!
|
94
111
|
|
95
|
-
@article.published = false
|
96
112
|
@article.author = current_user
|
97
113
|
@article.save_attachments!(params[:attachments])
|
98
|
-
@article.state =
|
114
|
+
@article.state = "draft" unless @article.withdrawn?
|
99
115
|
@article.text_filter ||= current_user.default_text_filter
|
100
116
|
|
101
117
|
if @article.title.blank?
|
102
|
-
lastid = Article.order(
|
103
|
-
@article.title =
|
118
|
+
lastid = Article.order("id desc").first.id
|
119
|
+
@article.title = "Draft article #{lastid}"
|
104
120
|
end
|
105
121
|
|
106
122
|
if @article.save
|
107
|
-
flash[:success] = I18n.t(
|
108
|
-
@must_update_calendar =
|
123
|
+
flash[:success] = I18n.t("admin.content.autosave.success")
|
124
|
+
@must_update_calendar =
|
125
|
+
(params[:article][:published_at] and
|
126
|
+
params[:article][:published_at].to_time.to_i < Time.zone.now.to_time.to_i and
|
127
|
+
@article.parent_id.nil?)
|
109
128
|
respond_to do |format|
|
110
129
|
format.js
|
111
130
|
end
|
@@ -114,15 +133,15 @@ class Admin::ContentController < Admin::BaseController
|
|
114
133
|
|
115
134
|
protected
|
116
135
|
|
117
|
-
def
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
136
|
+
def fetch_fresh_or_existing_draft_for_article
|
137
|
+
return unless @article.published? && @article.id
|
138
|
+
|
139
|
+
parent_id = @article.id
|
140
|
+
@article =
|
141
|
+
this_blog.articles.drafts.child_of(parent_id).first || this_blog.articles.build
|
142
|
+
@article.allow_comments = this_blog.default_allow_comments
|
143
|
+
@article.allow_pings = this_blog.default_allow_pings
|
144
|
+
@article.parent_id = parent_id
|
126
145
|
end
|
127
146
|
|
128
147
|
attr_accessor :resources, :resource
|
@@ -131,42 +150,44 @@ class Admin::ContentController < Admin::BaseController
|
|
131
150
|
|
132
151
|
def load_resources
|
133
152
|
@post_types = PostType.all
|
134
|
-
@images = Resource.images_by_created_at.page(params[:page]).per(10)
|
135
|
-
@resources = Resource.without_images_by_filename
|
136
153
|
@macros = TextFilterPlugin.macro_filters
|
137
154
|
end
|
138
155
|
|
139
156
|
def access_granted?(article_id)
|
140
157
|
article = Article.find(article_id)
|
141
158
|
if article.access_by? current_user
|
142
|
-
|
159
|
+
true
|
143
160
|
else
|
144
|
-
flash[:error] = I18n.t(
|
145
|
-
redirect_to action:
|
146
|
-
|
161
|
+
flash[:error] = I18n.t("admin.content.access_granted.error")
|
162
|
+
redirect_to action: "index"
|
163
|
+
false
|
147
164
|
end
|
148
165
|
end
|
149
166
|
|
150
167
|
def update_article_attributes
|
151
|
-
@article.
|
168
|
+
@article.assign_attributes(update_params)
|
152
169
|
@article.author = current_user
|
153
170
|
@article.save_attachments!(params[:attachments])
|
154
|
-
@article.
|
155
|
-
@article.text_filter ||= current_user.default_text_filter
|
171
|
+
@article.text_filter_name ||= default_text_filter
|
156
172
|
end
|
157
173
|
|
158
174
|
def update_params
|
159
|
-
params.
|
175
|
+
params.
|
176
|
+
require(:article).
|
177
|
+
permit(:allow_comments,
|
178
|
+
:allow_pings,
|
179
|
+
:body,
|
180
|
+
:body_and_extended,
|
181
|
+
:draft,
|
182
|
+
:extended,
|
183
|
+
:permalink,
|
184
|
+
:published_at,
|
185
|
+
:text_filter_name,
|
186
|
+
:title,
|
187
|
+
:keywords)
|
160
188
|
end
|
161
189
|
|
162
|
-
def
|
163
|
-
|
164
|
-
when 'new', 'edit', 'create'
|
165
|
-
'editor'
|
166
|
-
when 'show', 'autosave'
|
167
|
-
nil
|
168
|
-
else
|
169
|
-
'administration'
|
170
|
-
end
|
190
|
+
def default_text_filter
|
191
|
+
current_user.text_filter || this_blog.text_filter
|
171
192
|
end
|
172
193
|
end
|
@@ -1,87 +1,33 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Admin::DashboardController < Admin::BaseController
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
4
|
+
require "open-uri"
|
5
|
+
require "time"
|
6
|
+
require "rexml/document"
|
7
7
|
|
8
8
|
def index
|
9
|
-
|
10
|
-
today = t.strftime('%Y-%m-%d 00:00')
|
9
|
+
today = Time.zone.now.strftime("%Y-%m-%d 00:00")
|
11
10
|
|
12
|
-
# Since last
|
13
|
-
|
14
|
-
@
|
11
|
+
# Since last visit
|
12
|
+
last_sign_in = current_user.last_sign_in_at
|
13
|
+
@newposts_count = Article.published_since(last_sign_in).count
|
14
|
+
@newcomments_count = Feedback.created_since(last_sign_in).count
|
15
15
|
|
16
16
|
# Today
|
17
|
-
@statposts = Article.published.where(
|
18
|
-
@statsdrafts = Article.drafts.where(
|
19
|
-
@statspages = Page.where(
|
20
|
-
@statuses = Note.where(
|
21
|
-
@statuserposts = Article.published.where(
|
22
|
-
|
23
|
-
@
|
24
|
-
@
|
25
|
-
@
|
17
|
+
@statposts = Article.published.where("published_at > ?", today).count
|
18
|
+
@statsdrafts = Article.drafts.where("created_at > ?", today).count
|
19
|
+
@statspages = Page.where("published_at > ?", today).count
|
20
|
+
@statuses = Note.where("published_at > ?", today).count
|
21
|
+
@statuserposts = Article.published.where("published_at > ?", today).
|
22
|
+
where(user_id: current_user.id).count
|
23
|
+
@statcomments = Comment.where("created_at > ?", today).count
|
24
|
+
@presumedspam = Comment.presumed_spam.where("created_at > ?", today).count
|
25
|
+
@confirmed = Comment.ham.where("created_at > ?", today).count
|
26
|
+
@unconfirmed = Comment.unconfirmed.where("created_at > ?", today).count
|
26
27
|
|
27
28
|
@comments = Comment.last_published
|
28
|
-
@drafts = Article.drafts.where(
|
29
|
+
@drafts = Article.drafts.where("user_id = ?", current_user.id).limit(5)
|
29
30
|
|
30
31
|
@statspam = Comment.spam.count
|
31
|
-
@inbound_links = inbound_links
|
32
|
-
@publify_links = publify_dev
|
33
|
-
publify_version
|
34
|
-
end
|
35
|
-
|
36
|
-
def publify_version
|
37
|
-
version = nil
|
38
|
-
begin
|
39
|
-
open(PUBLIFY_VERSION_URL) do |http|
|
40
|
-
publify_version = http.read[0..5]
|
41
|
-
version = publify_version.split('.')
|
42
|
-
end
|
43
|
-
rescue
|
44
|
-
return
|
45
|
-
end
|
46
|
-
if version[0].to_i > TYPO_MAJOR.to_i
|
47
|
-
flash[:error] = I18n.t('admin.dashboard.publify_version.error')
|
48
|
-
elsif version[1].to_i > TYPO_SUB.to_i
|
49
|
-
flash[:warning] = I18n.t('admin.dashboard.publify_version.warning')
|
50
|
-
elsif version[2].to_i > TYPO_MINOR.to_i
|
51
|
-
flash[:notice] = I18n.t('admin.dashboard.publify_version.notice')
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def inbound_links
|
58
|
-
host = URI.parse(this_blog.base_url).host
|
59
|
-
return [] if Rails.env.development?
|
60
|
-
url = "http://www.google.com/search?q=link:#{host}&tbm=blg&output=rss"
|
61
|
-
fetch_rss(url).reverse.compact
|
62
|
-
end
|
63
|
-
|
64
|
-
def publify_dev
|
65
|
-
url = 'http://blog.publify.co/articles.rss'
|
66
|
-
fetch_rss(url)[0..2]
|
67
|
-
end
|
68
|
-
|
69
|
-
def fetch_rss(url)
|
70
|
-
open(url) do |http|
|
71
|
-
return parse_rss(http.read)
|
72
|
-
end
|
73
|
-
rescue
|
74
|
-
[]
|
75
|
-
end
|
76
|
-
|
77
|
-
RssItem = Struct.new(:link, :title, :description, :description_link, :date, :author) do
|
78
|
-
def to_s
|
79
|
-
title
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def parse_rss(body)
|
84
|
-
doc = Feedjira::Feed.parse(body)
|
85
|
-
doc.entries
|
86
32
|
end
|
87
33
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Admin::FeedbackController < Admin::BaseController
|
2
4
|
ONLY_DOMAIN = %w(unapproved presumed_ham presumed_spam ham spam).freeze
|
3
5
|
|
@@ -9,7 +11,7 @@ class Admin::FeedbackController < Admin::BaseController
|
|
9
11
|
scoped_feedback = scoped_feedback.send(@only_param) if @only_param
|
10
12
|
end
|
11
13
|
|
12
|
-
params.delete(:page) if params[:page].blank? || params[:page] ==
|
14
|
+
params.delete(:page) if params[:page].blank? || params[:page] == "0"
|
13
15
|
|
14
16
|
@feedback = scoped_feedback.paginated(params[:page], this_blog.admin_display_elements)
|
15
17
|
end
|
@@ -23,11 +25,11 @@ class Admin::FeedbackController < Admin::BaseController
|
|
23
25
|
|
24
26
|
begin
|
25
27
|
@record.destroy
|
26
|
-
flash[:success] = I18n.t(
|
28
|
+
flash[:success] = I18n.t("admin.feedback.destroy.success")
|
27
29
|
rescue ActiveRecord::RecordNotFound
|
28
|
-
flash[:error] = I18n.t(
|
30
|
+
flash[:error] = I18n.t("admin.feedback.destroy.error")
|
29
31
|
end
|
30
|
-
redirect_to action:
|
32
|
+
redirect_to action: "article", id: @record.article.id
|
31
33
|
end
|
32
34
|
|
33
35
|
def create
|
@@ -36,12 +38,13 @@ class Admin::FeedbackController < Admin::BaseController
|
|
36
38
|
@comment.user_id = current_user.id
|
37
39
|
|
38
40
|
if request.post? && @comment.save
|
39
|
-
# We should probably wave a spam filter over this, but for now, just mark
|
41
|
+
# We should probably wave a spam filter over this, but for now, just mark
|
42
|
+
# it as published.
|
40
43
|
@comment.mark_as_ham
|
41
44
|
@comment.save!
|
42
|
-
flash[:success] = I18n.t(
|
45
|
+
flash[:success] = I18n.t("admin.feedback.create.success")
|
43
46
|
end
|
44
|
-
redirect_to action:
|
47
|
+
redirect_to action: "article", id: @article.id
|
45
48
|
end
|
46
49
|
|
47
50
|
def edit
|
@@ -49,7 +52,7 @@ class Admin::FeedbackController < Admin::BaseController
|
|
49
52
|
@article = @comment.article
|
50
53
|
unless @article.access_by? current_user
|
51
54
|
redirect_to admin_feedback_index_url
|
52
|
-
|
55
|
+
nil
|
53
56
|
end
|
54
57
|
end
|
55
58
|
|
@@ -61,34 +64,31 @@ class Admin::FeedbackController < Admin::BaseController
|
|
61
64
|
end
|
62
65
|
comment.attributes = comment_params
|
63
66
|
if request.post? && comment.save
|
64
|
-
flash[:success] = I18n.t(
|
65
|
-
redirect_to action:
|
67
|
+
flash[:success] = I18n.t("admin.feedback.update.success")
|
68
|
+
redirect_to action: "article", id: comment.article.id
|
66
69
|
else
|
67
|
-
redirect_to action:
|
70
|
+
redirect_to action: "edit", id: comment.id
|
68
71
|
end
|
69
72
|
end
|
70
73
|
|
71
74
|
def article
|
72
75
|
@article = this_blog.articles.find(params[:id])
|
73
|
-
@feedback = @article.comments
|
74
|
-
@feedback = @
|
75
|
-
@feedback
|
76
|
+
@feedback = @article.comments
|
77
|
+
@feedback = @feedback.ham if params[:ham] && params[:spam].blank?
|
78
|
+
@feedback = @feedback.spam if params[:spam] && params[:ham].blank?
|
76
79
|
end
|
77
80
|
|
78
81
|
def change_state
|
79
82
|
return unless request.xhr?
|
80
83
|
|
81
84
|
@feedback = Feedback.find(params[:id])
|
82
|
-
|
85
|
+
new_state = @feedback.change_state!
|
83
86
|
|
84
87
|
respond_to do |format|
|
85
|
-
if
|
86
|
-
|
87
|
-
page.replace_html('commentList', partial: 'admin/dashboard/comment')
|
88
|
-
elsif template == 'ham'
|
89
|
-
format.js { render 'ham' }
|
88
|
+
if new_state == "ham"
|
89
|
+
format.js { render "ham" }
|
90
90
|
else
|
91
|
-
format.js { render
|
91
|
+
format.js { render "spam" }
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
@@ -98,37 +98,46 @@ class Admin::FeedbackController < Admin::BaseController
|
|
98
98
|
items = Feedback.find(ids)
|
99
99
|
@unexpired = true
|
100
100
|
|
101
|
-
bulkop = (params[:bulkop_top] || {}).empty?
|
101
|
+
bulkop = if (params[:bulkop_top] || {}).empty?
|
102
|
+
params[:bulkop_bottom]
|
103
|
+
else
|
104
|
+
params[:bulkop_top]
|
105
|
+
end
|
102
106
|
|
103
107
|
case bulkop
|
104
|
-
when
|
108
|
+
when "Delete Checked Items"
|
105
109
|
count = 0
|
106
110
|
ids.each do |id|
|
107
111
|
count += Feedback.delete(id)
|
108
112
|
end
|
109
|
-
flash[:success] = I18n.t(
|
110
|
-
when
|
113
|
+
flash[:success] = I18n.t("admin.feedback.bulkops.success_deleted", count: count)
|
114
|
+
when "Mark Checked Items as Ham"
|
111
115
|
update_feedback(items, :mark_as_ham!)
|
112
|
-
flash[:success] = I18n.t(
|
113
|
-
|
116
|
+
flash[:success] = I18n.t("admin.feedback.bulkops.success_mark_as_ham",
|
117
|
+
count: ids.size)
|
118
|
+
when "Mark Checked Items as Spam"
|
114
119
|
update_feedback(items, :mark_as_spam!)
|
115
|
-
flash[:success] = I18n.t(
|
116
|
-
|
120
|
+
flash[:success] = I18n.t("admin.feedback.bulkops.success_mark_as_spam",
|
121
|
+
count: ids.size)
|
122
|
+
when "Confirm Classification of Checked Items"
|
117
123
|
update_feedback(items, :confirm_classification!)
|
118
|
-
flash[:success] = I18n.t(
|
119
|
-
|
124
|
+
flash[:success] = I18n.t("admin.feedback.bulkops.success_classification",
|
125
|
+
count: ids.size)
|
126
|
+
when "Delete all spam"
|
120
127
|
if request.post?
|
121
|
-
Feedback.where(
|
122
|
-
flash[:success] = I18n.t(
|
128
|
+
Feedback.where("state = ?", "spam").delete_all
|
129
|
+
flash[:success] = I18n.t("admin.feedback.bulkops.success_deleted_spam")
|
123
130
|
end
|
124
131
|
else
|
125
|
-
flash[:error] = I18n.t(
|
132
|
+
flash[:error] = I18n.t("admin.feedback.bulkops.error")
|
126
133
|
end
|
127
134
|
|
128
135
|
if params[:article_id]
|
129
|
-
redirect_to action:
|
136
|
+
redirect_to action: "article", id: params[:article_id], confirmed: params[:confirmed],
|
137
|
+
published: params[:published]
|
130
138
|
else
|
131
|
-
redirect_to action:
|
139
|
+
redirect_to action: "index", page: params[:page], search: params[:search],
|
140
|
+
confirmed: params[:confirmed], published: params[:published]
|
132
141
|
end
|
133
142
|
end
|
134
143
|
|