pages_core 3.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +29 -0
- data/Rakefile +10 -0
- data/app/assets/images/pages/admin/description-bg.gif +0 -0
- data/app/assets/images/pages/admin/drag-handle.gif +0 -0
- data/app/assets/images/pages/admin/drag-icon.png +0 -0
- data/app/assets/images/pages/admin/flash-error-bg.gif +0 -0
- data/app/assets/images/pages/admin/formelement-bg.gif +0 -0
- data/app/assets/images/pages/admin/header-tab-current-bg.gif +0 -0
- data/app/assets/images/pages/admin/icon.png +0 -0
- data/app/assets/images/pages/admin/image-editor-bg.png +0 -0
- data/app/assets/images/pages/admin/list-table-pin-blue.gif +0 -0
- data/app/assets/images/pages/admin/list-table-pin-disabled.gif +0 -0
- data/app/assets/images/pages/admin/list-table-pin-green.gif +0 -0
- data/app/assets/images/pages/admin/list-table-pin-red.gif +0 -0
- data/app/assets/images/pages/admin/list-table-pin-yellow.gif +0 -0
- data/app/assets/images/pages/admin/list-table-td-bg.gif +0 -0
- data/app/assets/images/pages/admin/loading-modal.gif +0 -0
- data/app/assets/images/pages/admin/sidebar-bg.gif +0 -0
- data/app/assets/images/pages/admin/textarea_controls.gif +0 -0
- data/app/assets/images/pages/admin/warning-icon.gif +0 -0
- data/app/assets/images/pages/favicon.gif +0 -0
- data/app/assets/images/pages/feed-icon-14x14.png +0 -0
- data/app/assets/javascripts/pages/admin/controllers/base.js.coffee +4 -0
- data/app/assets/javascripts/pages/admin/controllers/pages_controller.js.coffee +139 -0
- data/app/assets/javascripts/pages/admin/controllers/users_controller.js.coffee +9 -0
- data/app/assets/javascripts/pages/admin/features/content_tabs.js.coffee +47 -0
- data/app/assets/javascripts/pages/admin/features/editable_image.js.coffee.erb +122 -0
- data/app/assets/javascripts/pages/admin/features/modal.js.coffee +66 -0
- data/app/assets/javascripts/pages/admin/features/page_images.js +329 -0
- data/app/assets/javascripts/pages/admin/features/rich_text.js.coffee +40 -0
- data/app/assets/javascripts/pages/admin/features/tag_editor.js +159 -0
- data/app/assets/javascripts/pages/admin/lib/ajax_extensions.js.coffee +17 -0
- data/app/assets/javascripts/pages/admin/lib/center_on_screen.js.coffee +21 -0
- data/app/assets/javascripts/pages/admin/lib/jrichtextarea.js +57 -0
- data/app/assets/javascripts/pages/admin.js.coffee +54 -0
- data/app/assets/javascripts/pages/login_form.js.coffee +17 -0
- data/app/assets/stylesheets/pages/admin/buttons.css.erb +5 -0
- data/app/assets/stylesheets/pages/admin/controllers/artists.css.erb +94 -0
- data/app/assets/stylesheets/pages/admin/controllers/files.css.erb +58 -0
- data/app/assets/stylesheets/pages/admin/controllers/pages.css.scss.erb +178 -0
- data/app/assets/stylesheets/pages/admin/controllers/users.css.erb +3 -0
- data/app/assets/stylesheets/pages/admin/editable_image.css.erb +19 -0
- data/app/assets/stylesheets/pages/admin/forms.css.scss.erb +73 -0
- data/app/assets/stylesheets/pages/admin/header.css.erb +129 -0
- data/app/assets/stylesheets/pages/admin/images.css.scss.erb +160 -0
- data/app/assets/stylesheets/pages/admin/links.css.erb +34 -0
- data/app/assets/stylesheets/pages/admin/list_table.css.erb +56 -0
- data/app/assets/stylesheets/pages/admin/login.css.scss.erb +32 -0
- data/app/assets/stylesheets/pages/admin/modal.css.erb +14 -0
- data/app/assets/stylesheets/pages/admin/pagination.css.scss +22 -0
- data/app/assets/stylesheets/pages/admin/print.css.erb +17 -0
- data/app/assets/stylesheets/pages/admin/sidebar.css.erb +39 -0
- data/app/assets/stylesheets/pages/admin/sortable_images.css.erb +18 -0
- data/app/assets/stylesheets/pages/admin/tag_editor.css.scss.erb +48 -0
- data/app/assets/stylesheets/pages/admin/textarea.css.erb +55 -0
- data/app/assets/stylesheets/pages/admin.css.erb +404 -0
- data/app/assets/stylesheets/pages/errors.css +126 -0
- data/app/controller_dummies/admin/admin_controller.rb +6 -0
- data/app/controller_dummies/application_controller.rb +6 -0
- data/app/controller_dummies/frontend_controller.rb +4 -0
- data/app/controller_dummies/images_controller.rb +4 -0
- data/app/controller_dummies/page_files_controller.rb +4 -0
- data/app/controller_dummies/pages_controller.rb +4 -0
- data/app/controller_dummies/sitemaps_controller.rb +4 -0
- data/app/controllers/admin/categories_controller.rb +57 -0
- data/app/controllers/admin/images_controller.rb +48 -0
- data/app/controllers/admin/invites_controller.rb +79 -0
- data/app/controllers/admin/page_comments_controller.rb +61 -0
- data/app/controllers/admin/page_files_controller.rb +81 -0
- data/app/controllers/admin/page_images_controller.rb +116 -0
- data/app/controllers/admin/pages_controller.rb +179 -0
- data/app/controllers/admin/password_resets_controller.rb +83 -0
- data/app/controllers/admin/users_controller.rb +102 -0
- data/app/controllers/concerns/pages_core/authentication.rb +48 -0
- data/app/controllers/concerns/pages_core/domain_based_cache.rb +28 -0
- data/app/controllers/concerns/pages_core/exception_handler.rb +114 -0
- data/app/controllers/concerns/pages_core/policies_helper.rb +40 -0
- data/app/controllers/concerns/pages_core/process_titler.rb +44 -0
- data/app/controllers/errors_controller.rb +45 -0
- data/app/controllers/pages_core/admin_controller.rb +109 -0
- data/app/controllers/pages_core/application_controller.rb +31 -0
- data/app/controllers/pages_core/frontend/page_files_controller.rb +42 -0
- data/app/controllers/pages_core/frontend/pages_controller.rb +308 -0
- data/app/controllers/pages_core/frontend_controller.rb +34 -0
- data/app/controllers/pages_core/images_controller.rb +15 -0
- data/app/controllers/pages_core/sitemaps_controller.rb +73 -0
- data/app/controllers/sessions_controller.rb +38 -0
- data/app/formatters/pages_core/html_formatter.rb +86 -0
- data/app/helpers/admin/admin_helper.rb +7 -0
- data/app/helpers/admin/menu_helper.rb +65 -0
- data/app/helpers/admin/pages_helper.rb +74 -0
- data/app/helpers/application_helper.rb +5 -0
- data/app/helpers/frontend_helper.rb +5 -0
- data/app/helpers/pages_core/admin/admin_helper.rb +108 -0
- data/app/helpers/pages_core/admin/labelled_field_helper.rb +73 -0
- data/app/helpers/pages_core/admin/tag_editor_helper.rb +46 -0
- data/app/helpers/pages_core/application_helper.rb +65 -0
- data/app/helpers/pages_core/form_builder.rb +187 -0
- data/app/helpers/pages_core/frontend_helper.rb +21 -0
- data/app/helpers/pages_core/head_tags_helper.rb +270 -0
- data/app/helpers/pages_core/images_helper.rb +36 -0
- data/app/helpers/pages_core/login_helper.rb +14 -0
- data/app/indices/page_file_index.rb +9 -0
- data/app/indices/page_index.rb +29 -0
- data/app/indices/user_index.rb +11 -0
- data/app/jobs/pages_core/autopublish_job.rb +11 -0
- data/app/jobs/pages_core/sweep_cache_job.rb +11 -0
- data/app/mailers/admin_mailer.rb +46 -0
- data/app/models/autopublisher.rb +33 -0
- data/app/models/category.rb +23 -0
- data/app/models/concerns/pages_core/has_roles.rb +25 -0
- data/app/models/concerns/pages_core/humanizable_param.rb +17 -0
- data/app/models/concerns/pages_core/page_tree.rb +85 -0
- data/app/models/concerns/pages_core/searchable_page.rb +33 -0
- data/app/models/concerns/pages_core/sweepable.rb +23 -0
- data/app/models/concerns/pages_core/taggable.rb +46 -0
- data/app/models/concerns/pages_core/templateable.rb +85 -0
- data/app/models/image.rb +23 -0
- data/app/models/invite.rb +33 -0
- data/app/models/invite_role.rb +11 -0
- data/app/models/localization.rb +27 -0
- data/app/models/page.rb +281 -0
- data/app/models/page_builder.rb +61 -0
- data/app/models/page_comment.rb +18 -0
- data/app/models/page_file.rb +74 -0
- data/app/models/page_image.rb +62 -0
- data/app/models/password_reset_token.rb +38 -0
- data/app/models/role.rb +51 -0
- data/app/models/tag.rb +64 -0
- data/app/models/tagging.rb +22 -0
- data/app/models/user.rb +131 -0
- data/app/policies/invite_policy.rb +29 -0
- data/app/policies/page_file_policy.rb +25 -0
- data/app/policies/page_image_policy.rb +25 -0
- data/app/policies/page_policy.rb +33 -0
- data/app/policies/policy.rb +64 -0
- data/app/policies/user_policy.rb +49 -0
- data/app/serializers/admin/image_serializer.rb +10 -0
- data/app/serializers/admin/page_image_serializer.rb +6 -0
- data/app/serializers/page_image_serializer.rb +38 -0
- data/app/serializers/page_serializer.rb +21 -0
- data/app/views/admin/invites/new.html.erb +16 -0
- data/app/views/admin/invites/show.html.erb +25 -0
- data/app/views/admin/pages/_edit_comments.html.erb +21 -0
- data/app/views/admin/pages/_edit_content.html.erb +10 -0
- data/app/views/admin/pages/_edit_images.html.erb +84 -0
- data/app/views/admin/pages/_edit_metadata.html.erb +24 -0
- data/app/views/admin/pages/_edit_options.html.erb +72 -0
- data/app/views/admin/pages/_pagelisting.html.erb +63 -0
- data/app/views/admin/pages/edit.html.erb +161 -0
- data/app/views/admin/pages/index.html.erb +67 -0
- data/app/views/admin/pages/new.html.erb +48 -0
- data/app/views/admin/pages/news.html.erb +69 -0
- data/app/views/admin/password_resets/show.html.erb +24 -0
- data/app/views/admin/users/_access_control.html.erb +14 -0
- data/app/views/admin/users/_list.html.erb +62 -0
- data/app/views/admin/users/_login_form.html.erb +47 -0
- data/app/views/admin/users/deactivated.html.erb +12 -0
- data/app/views/admin/users/edit.html.erb +54 -0
- data/app/views/admin/users/index.html.erb +27 -0
- data/app/views/admin/users/login.html.erb +15 -0
- data/app/views/admin/users/new.html.erb +23 -0
- data/app/views/admin/users/new_password.html.erb +19 -0
- data/app/views/admin/users/show.html.erb +64 -0
- data/app/views/admin_mailer/comment_notification.text.erb +7 -0
- data/app/views/admin_mailer/error_report.html.erb +70 -0
- data/app/views/admin_mailer/invite.text.erb +9 -0
- data/app/views/admin_mailer/password_reset.text.erb +13 -0
- data/app/views/errors/403.html.erb +6 -0
- data/app/views/errors/404.html.erb +11 -0
- data/app/views/errors/405.html.erb +4 -0
- data/app/views/errors/500.html.erb +19 -0
- data/app/views/errors/500_critical.html.erb +7 -0
- data/app/views/errors/_generic_help.html.erb +21 -0
- data/app/views/errors/report.html.erb +4 -0
- data/app/views/feeds/pages.rss.builder +39 -0
- data/app/views/layouts/admin/_analytics.html.erb +18 -0
- data/app/views/layouts/admin/_header.html.erb +37 -0
- data/app/views/layouts/admin.html.erb +79 -0
- data/app/views/layouts/errors.html.erb +23 -0
- data/app/views/sitemaps/show.xml.builder +9 -0
- data/config/locales/en.yml +6 -0
- data/config/removed_migrations.yml +60 -0
- data/config/routes.rb +127 -0
- data/db/migrate/20111219033112_create_pages_tables.rb +281 -0
- data/db/migrate/20120627033112_rename_textbits.rb +19 -0
- data/db/migrate/20121010055412_drop_removed_tables.rb +83 -0
- data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +11 -0
- data/db/migrate/20130303053932_remove_filter_from_localizations.rb +11 -0
- data/db/migrate/20130303160632_remove_imagesets.rb +24 -0
- data/db/migrate/20130303161732_remove_sms_subscribers.rb +16 -0
- data/db/migrate/20130823133208_update_page_redirect_to.rb +25 -0
- data/db/migrate/20140203183900_create_roles.rb +63 -0
- data/db/migrate/20140414150500_change_locale_names.rb +13 -0
- data/db/migrate/20140515130100_remove_sphinx_deltas.rb +15 -0
- data/db/migrate/20140604142100_remove_openid_url.rb +9 -0
- data/db/migrate/20140920231700_convert_images_to_dis.rb +79 -0
- data/db/migrate/20140922124600_convert_page_files_to_dis.rb +50 -0
- data/db/migrate/20141004003100_create_password_reset_tokens.rb +10 -0
- data/db/migrate/20141006181300_remove_user_cruft.rb +11 -0
- data/db/migrate/20141007173000_create_invites.rb +16 -0
- data/db/migrate/20150204130800_update_delayed_job_table.rb +9 -0
- data/db/migrate/20150401131300_localize_images.rb +39 -0
- data/db/migrate/20150520174300_add_meta_image_to_page.rb +5 -0
- data/db/migrate/20150904164200_add_pinned_to_tags.rb +5 -0
- data/lib/pages_core/admin_menu_item.rb +22 -0
- data/lib/pages_core/archive_finder.rb +75 -0
- data/lib/pages_core/cache_sweeper.rb +112 -0
- data/lib/pages_core/configuration/base.rb +85 -0
- data/lib/pages_core/configuration/pages.rb +23 -0
- data/lib/pages_core/configuration.rb +9 -0
- data/lib/pages_core/engine.rb +27 -0
- data/lib/pages_core/extensions/hash_extensions.rb +23 -0
- data/lib/pages_core/extensions/string_extensions.rb +17 -0
- data/lib/pages_core/extensions.rb +4 -0
- data/lib/pages_core/localizable/active_record_extension.rb +41 -0
- data/lib/pages_core/localizable/class_methods.rb +51 -0
- data/lib/pages_core/localizable/configuration.rb +50 -0
- data/lib/pages_core/localizable/instance_methods.rb +130 -0
- data/lib/pages_core/localizable/localizer.rb +72 -0
- data/lib/pages_core/localizable/scope_extension.rb +22 -0
- data/lib/pages_core/localizable.rb +49 -0
- data/lib/pages_core/pages_plugin.rb +14 -0
- data/lib/pages_core/paginates.rb +102 -0
- data/lib/pages_core/plugin.rb +118 -0
- data/lib/pages_core/templates/block_configuration.rb +17 -0
- data/lib/pages_core/templates/configuration.rb +81 -0
- data/lib/pages_core/templates/configuration_handler.rb +62 -0
- data/lib/pages_core/templates/configuration_proxy.rb +28 -0
- data/lib/pages_core/templates/controller_actions.rb +32 -0
- data/lib/pages_core/templates/template_configuration.rb +198 -0
- data/lib/pages_core/templates.rb +53 -0
- data/lib/pages_core/version.rb +5 -0
- data/lib/pages_core.rb +89 -0
- data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +68 -0
- data/lib/rails/generators/pages_core/frontend/templates/application.css.scss.erb +3 -0
- data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +16 -0
- data/lib/rails/generators/pages_core/frontend/templates/base.css.scss.erb +3 -0
- data/lib/rails/generators/pages_core/frontend/templates/breakpoints.css.scss.erb +24 -0
- data/lib/rails/generators/pages_core/frontend/templates/hidpi.css.scss.erb +8 -0
- data/lib/rails/generators/pages_core/frontend/templates/layout.html.erb +15 -0
- data/lib/rails/generators/pages_core/frontend/templates/normalize.css.erb +425 -0
- data/lib/rails/generators/pages_core/install/install_generator.rb +135 -0
- data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +1 -0
- data/lib/rails/generators/pages_core/install/templates/application_controller.rb +11 -0
- data/lib/rails/generators/pages_core/install/templates/application_helper.rb +5 -0
- data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +11 -0
- data/lib/rails/generators/pages_core/install/templates/default_page_template.html.erb +5 -0
- data/lib/rails/generators/pages_core/install/templates/delayed_job +7 -0
- data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +3 -0
- data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +6 -0
- data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +5 -0
- data/lib/rails/generators/pages_core/install/templates/gitignore.erb +25 -0
- data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +67 -0
- data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +4 -0
- data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +45 -0
- data/lib/rails/generators/pages_core/install/templates/thinking_sphinx.yml +12 -0
- data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +34 -0
- data/lib/rails/generators/pages_core/rspec/templates/factories.rb +9 -0
- data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +9 -0
- data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +51 -0
- data/lib/tasks/db.rake +96 -0
- data/lib/tasks/pages/assets.rake +65 -0
- data/lib/tasks/pages/cache.rake +16 -0
- data/lib/tasks/pages/update.rake +19 -0
- data/lib/tasks/pages.rake +76 -0
- data/template.rb +19 -0
- data/vendor/assets/javascripts/jquery.dimscreen.js +77 -0
- data/vendor/assets/javascripts/jquery.fieldselection.js +59 -0
- metadata +690 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
module Admin
|
2
|
+
class InvitesController < Admin::AdminController
|
3
|
+
before_action :require_authentication, except: [:accept, :show]
|
4
|
+
before_action :find_invite, only: [:show, :edit, :update, :destroy, :accept]
|
5
|
+
before_action :require_valid_token, only: [:show, :accept]
|
6
|
+
|
7
|
+
require_authorization(
|
8
|
+
Invite,
|
9
|
+
proc { @invite },
|
10
|
+
member: [:show, :edit, :update, :destroy],
|
11
|
+
collection: [:index, :new, :create]
|
12
|
+
)
|
13
|
+
|
14
|
+
def index
|
15
|
+
redirect_to admin_users_url
|
16
|
+
end
|
17
|
+
|
18
|
+
def accept
|
19
|
+
@user = @invite.create_user(user_params)
|
20
|
+
if @user.valid?
|
21
|
+
authenticate!(@user)
|
22
|
+
redirect_to admin_default_url
|
23
|
+
else
|
24
|
+
render action: :show
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def show
|
29
|
+
@user = User.new(email: @invite.email)
|
30
|
+
end
|
31
|
+
|
32
|
+
def new
|
33
|
+
@invite = current_user.invites.new
|
34
|
+
Role.roles.each do |role|
|
35
|
+
@invite.roles.new(name: role.name) if role.default
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def create
|
40
|
+
@invite = current_user.invites.create(invite_params)
|
41
|
+
if @invite.valid?
|
42
|
+
AdminMailer.invite(
|
43
|
+
@invite,
|
44
|
+
admin_invite_with_token_url(@invite, @invite.token)
|
45
|
+
).deliver_now
|
46
|
+
@invite.update(sent_at: Time.now)
|
47
|
+
redirect_to admin_invites_url
|
48
|
+
else
|
49
|
+
render action: :new
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def destroy
|
54
|
+
flash[:notice] = "The invite to #{@invite.email} has been deleted"
|
55
|
+
@invite.destroy
|
56
|
+
redirect_to admin_invites_url
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def find_invite
|
62
|
+
@invite = Invite.find(params[:id])
|
63
|
+
end
|
64
|
+
|
65
|
+
def user_params
|
66
|
+
params.require(:user).permit(:name, :email, :password, :confirm_password)
|
67
|
+
end
|
68
|
+
|
69
|
+
def invite_params
|
70
|
+
params.require(:invite).permit(:email, role_names: [])
|
71
|
+
end
|
72
|
+
|
73
|
+
def require_valid_token
|
74
|
+
return if @invite && secure_compare(@invite.token, params[:token])
|
75
|
+
flash[:notice] = "Invalid invite token"
|
76
|
+
redirect_to(login_admin_users_url) && return
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Admin
|
4
|
+
class PageCommentsController < Admin::AdminController
|
5
|
+
before_action :find_page
|
6
|
+
before_action :find_page_comment, only: [:show, :edit, :update, :destroy]
|
7
|
+
|
8
|
+
def index
|
9
|
+
redirect_to admin_page_path(@locale, @page)
|
10
|
+
end
|
11
|
+
|
12
|
+
def show
|
13
|
+
end
|
14
|
+
|
15
|
+
def new
|
16
|
+
@page_comment = @page.comments.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def edit
|
20
|
+
end
|
21
|
+
|
22
|
+
def create
|
23
|
+
@page_comment = @page.comments.create(page_comment_params)
|
24
|
+
if @page_comment.valid?
|
25
|
+
flash[:notice] = "The comment was created"
|
26
|
+
redirect_to admin_page_path(@locale, @page)
|
27
|
+
else
|
28
|
+
render action: :new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def update
|
33
|
+
if @page_comment.update(page_comment_params)
|
34
|
+
flash[:notice] = "The comment was updated"
|
35
|
+
redirect_to admin_page_path(@locale, @page)
|
36
|
+
else
|
37
|
+
render action: :edit
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def destroy
|
42
|
+
@page_comment.destroy
|
43
|
+
flash[:notice] = "The comment was deleted"
|
44
|
+
redirect_to admin_page_path(@locale, @page)
|
45
|
+
end
|
46
|
+
|
47
|
+
protected
|
48
|
+
|
49
|
+
def find_page
|
50
|
+
@page = Page.find(params[:page_id])
|
51
|
+
end
|
52
|
+
|
53
|
+
def find_page_comment
|
54
|
+
@page_comment = @page.comments.find(params[:id])
|
55
|
+
end
|
56
|
+
|
57
|
+
def page_comment_params
|
58
|
+
params.require(:page_comment).permit(:name, :email, :url, :body)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Admin
|
4
|
+
class PageFilesController < Admin::AdminController
|
5
|
+
before_action :find_page
|
6
|
+
before_action :find_page_file, only: [:show, :edit, :update, :destroy]
|
7
|
+
before_action :redirect_to_page, only: [:index, :show, :new, :edit]
|
8
|
+
|
9
|
+
require_authorization(
|
10
|
+
PageFile,
|
11
|
+
proc { @page_file },
|
12
|
+
collection: [:index, :reorder, :new, :create]
|
13
|
+
)
|
14
|
+
|
15
|
+
def index
|
16
|
+
end
|
17
|
+
|
18
|
+
def reorder
|
19
|
+
if params[:ids]
|
20
|
+
files = Array(params[:ids]).map { |id| PageFile.find(id) }
|
21
|
+
files.each_with_index do |file, index|
|
22
|
+
file.update(position: index)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
if request.xhr?
|
26
|
+
render text: "ok"
|
27
|
+
else
|
28
|
+
redirect_to_page
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def show
|
33
|
+
end
|
34
|
+
|
35
|
+
def new
|
36
|
+
end
|
37
|
+
|
38
|
+
def create
|
39
|
+
@page_file = @page.files.new
|
40
|
+
@page_file.update(page_file_params.merge(locale: @locale))
|
41
|
+
flash[:notice] = "Error uploading file!" unless @page_file.valid?
|
42
|
+
redirect_to_page
|
43
|
+
end
|
44
|
+
|
45
|
+
def edit
|
46
|
+
end
|
47
|
+
|
48
|
+
def update
|
49
|
+
if @page_file.update(page_file_params)
|
50
|
+
flash[:notice] = "File updated"
|
51
|
+
else
|
52
|
+
flash[:notice] = "Error updating file!"
|
53
|
+
end
|
54
|
+
redirect_to_page
|
55
|
+
end
|
56
|
+
|
57
|
+
def destroy
|
58
|
+
@page_file.destroy
|
59
|
+
flash[:notice] = "File deleted"
|
60
|
+
redirect_to_page
|
61
|
+
end
|
62
|
+
|
63
|
+
protected
|
64
|
+
|
65
|
+
def page_file_params
|
66
|
+
params.require(:page_file).permit(:name, :filename, :file)
|
67
|
+
end
|
68
|
+
|
69
|
+
def redirect_to_page
|
70
|
+
redirect_to(edit_admin_page_path(@locale, @page, anchor: "files"))
|
71
|
+
end
|
72
|
+
|
73
|
+
def find_page
|
74
|
+
@page = Page.find(params[:page_id]).localize(@locale)
|
75
|
+
end
|
76
|
+
|
77
|
+
def find_page_file
|
78
|
+
@page_file = @page.files.find(params[:id])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Admin
|
4
|
+
class PageImagesController < Admin::AdminController
|
5
|
+
before_action :find_page
|
6
|
+
before_action :find_page_image, only: [:show, :edit, :update, :destroy]
|
7
|
+
|
8
|
+
require_authorization(
|
9
|
+
PageImage,
|
10
|
+
proc { @page_image },
|
11
|
+
collection: [:index, :reorder, :new, :create]
|
12
|
+
)
|
13
|
+
|
14
|
+
def index
|
15
|
+
@page_images = @page.page_images
|
16
|
+
respond_to do |format|
|
17
|
+
format.json do
|
18
|
+
render json: @page_images, each_serializer: Admin::PageImageSerializer
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def reorder
|
24
|
+
@page_images = params[:ids].map { |id| PageImage.find(id) }
|
25
|
+
@page_images.each_with_index do |pi, i|
|
26
|
+
pi.update_column(:position, i)
|
27
|
+
end
|
28
|
+
respond_to do |format|
|
29
|
+
format.json do
|
30
|
+
render json: @page_images, each_serializer: Admin::PageImageSerializer
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def show
|
36
|
+
end
|
37
|
+
|
38
|
+
def new
|
39
|
+
@page_image = @page.page_images.new
|
40
|
+
end
|
41
|
+
|
42
|
+
def create
|
43
|
+
if page_images_params?
|
44
|
+
page_images_params.each do |_index, attributes|
|
45
|
+
if attributes[:image]
|
46
|
+
@page.page_images.create(attributes.merge(locale: @locale))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
else
|
50
|
+
@page.page_images.create(page_image_params.merge(locale: @locale))
|
51
|
+
end
|
52
|
+
redirect_to(admin_page_path(@locale, @page, anchor: "images"))
|
53
|
+
end
|
54
|
+
|
55
|
+
def update
|
56
|
+
if @page_image.update(page_image_params)
|
57
|
+
respond_to do |format|
|
58
|
+
format.html do
|
59
|
+
flash[:notice] = "The image was updated"
|
60
|
+
redirect_to(admin_page_path(@locale, @page, anchor: "images"))
|
61
|
+
end
|
62
|
+
format.json do
|
63
|
+
render json: @page_image.to_json
|
64
|
+
end
|
65
|
+
end
|
66
|
+
else
|
67
|
+
render action: :edit
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def destroy
|
72
|
+
@page_image.destroy
|
73
|
+
respond_to do |format|
|
74
|
+
format.html do
|
75
|
+
flash[:notice] = "The image was deleted"
|
76
|
+
redirect_to(admin_page_path(@locale, @page, anchor: "images"))
|
77
|
+
end
|
78
|
+
format.json do
|
79
|
+
render json: @page_image.to_json
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
protected
|
85
|
+
|
86
|
+
def find_page
|
87
|
+
@page = Page.find(params[:page_id]).localize(@locale)
|
88
|
+
end
|
89
|
+
|
90
|
+
def find_page_image
|
91
|
+
@page_image = @page.page_images.find(params[:id]).localize(@locale)
|
92
|
+
end
|
93
|
+
|
94
|
+
def page_image_params
|
95
|
+
params.require(:page_image).permit(
|
96
|
+
:image, :primary,
|
97
|
+
image_attributes: [
|
98
|
+
:id, :alternative, :caption,
|
99
|
+
:crop_start_x, :crop_start_y, :crop_width, :crop_height
|
100
|
+
]
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
def page_images_params
|
105
|
+
params.permit(
|
106
|
+
page_images: [:image, :primary, {
|
107
|
+
image_attributes: [:alternative, :caption]
|
108
|
+
}]
|
109
|
+
)[:page_images]
|
110
|
+
end
|
111
|
+
|
112
|
+
def page_images_params?
|
113
|
+
params[:page_images] ? true : false
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Admin
|
4
|
+
class PagesController < Admin::AdminController
|
5
|
+
before_action :require_news_pages, only: [:news]
|
6
|
+
before_action :find_page, only: [
|
7
|
+
:show, :edit, :preview, :update, :destroy, :reorder,
|
8
|
+
:delete_meta_image
|
9
|
+
]
|
10
|
+
before_action :find_categories
|
11
|
+
before_action :find_news_pages, only: [:news, :new_news]
|
12
|
+
|
13
|
+
require_authorization(
|
14
|
+
Page,
|
15
|
+
proc { @page },
|
16
|
+
collection: [:index, :news, :new, :new_news, :create, :reorder_pages]
|
17
|
+
)
|
18
|
+
|
19
|
+
def index
|
20
|
+
@root_pages = Page.roots.in_locale(@locale).visible
|
21
|
+
end
|
22
|
+
|
23
|
+
def news
|
24
|
+
@archive_finder = Page.where(parent_page_id: @news_pages)
|
25
|
+
.visible
|
26
|
+
.order("published_at DESC")
|
27
|
+
.in_locale(@locale)
|
28
|
+
.archive_finder
|
29
|
+
|
30
|
+
@year, @month = year_and_month(@archive_finder)
|
31
|
+
@year ||= Time.now.year
|
32
|
+
@month ||= Time.now.month
|
33
|
+
|
34
|
+
@pages = @archive_finder.by_year_and_month(@year, @month)
|
35
|
+
end
|
36
|
+
|
37
|
+
def reorder_pages
|
38
|
+
pages = params[:ids].map { |id| Page.find(id) }
|
39
|
+
PagesCore::CacheSweeper.once do
|
40
|
+
pages.each_with_index do |page, index|
|
41
|
+
page.update(position: (index + 1))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
render text: "ok" if request.xhr?
|
45
|
+
end
|
46
|
+
|
47
|
+
def show
|
48
|
+
edit
|
49
|
+
render action: :edit
|
50
|
+
end
|
51
|
+
|
52
|
+
def new
|
53
|
+
@authors = User.activated
|
54
|
+
@page = build_page(@locale)
|
55
|
+
if params[:parent]
|
56
|
+
@page.parent = Page.find(params[:parent])
|
57
|
+
elsif @news_pages
|
58
|
+
@page.parent = @news_pages.first
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# TODO: Should be refactored
|
63
|
+
def new_news
|
64
|
+
new
|
65
|
+
render action: :new
|
66
|
+
end
|
67
|
+
|
68
|
+
def create
|
69
|
+
@page = build_page(@locale)
|
70
|
+
if @page.update(page_params)
|
71
|
+
@page.update(
|
72
|
+
comments_allowed: @page.template_config.value(:comments_allowed)
|
73
|
+
)
|
74
|
+
@page.categories = param_categories
|
75
|
+
redirect_to edit_admin_page_url(@locale, @page)
|
76
|
+
else
|
77
|
+
render action: :new
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def edit
|
82
|
+
@authors = User.activated
|
83
|
+
# Make sure the page author is included in the dropdown
|
84
|
+
# even if the account isn't active.
|
85
|
+
if @authors.any? && @page.author
|
86
|
+
@authors = [@page.author] + @authors.reject { |a| a == @page.author }
|
87
|
+
end
|
88
|
+
@new_image ||= Image.new
|
89
|
+
end
|
90
|
+
|
91
|
+
def update
|
92
|
+
if @page.update(page_params)
|
93
|
+
@page.categories = param_categories
|
94
|
+
flash[:notice] = "Your changes were saved"
|
95
|
+
flash[:save_performed] = true
|
96
|
+
redirect_to edit_admin_page_url(@locale, @page)
|
97
|
+
else
|
98
|
+
edit
|
99
|
+
render action: :edit
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def destroy
|
104
|
+
@page = Page.find(params[:id])
|
105
|
+
@page.flag_as_deleted!
|
106
|
+
redirect_to admin_pages_url(@locale)
|
107
|
+
end
|
108
|
+
|
109
|
+
def delete_meta_image
|
110
|
+
@page.meta_image.destroy
|
111
|
+
flash[:notice] = "The image was deleted"
|
112
|
+
redirect_to edit_admin_page_url(@locale, @page, anchor: "metadata")
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def build_page(locale)
|
118
|
+
Page.new.localize(locale).tap do |page|
|
119
|
+
page.author = default_author || current_user
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def default_author
|
124
|
+
return unless PagesCore.config.default_author
|
125
|
+
User.where(email: PagesCore.config.default_author).first
|
126
|
+
end
|
127
|
+
|
128
|
+
def permitted_page_attributes
|
129
|
+
[
|
130
|
+
:template, :user_id, :status, :content_order,
|
131
|
+
:feed_enabled, :published_at, :redirect_to, :comments_allowed,
|
132
|
+
:image_link, :news_page, :unique_name, :pinned,
|
133
|
+
:parent_page_id, :serialized_tags, :meta_image
|
134
|
+
]
|
135
|
+
end
|
136
|
+
|
137
|
+
def page_params
|
138
|
+
params.require(:page).permit(
|
139
|
+
Page.localized_attributes + permitted_page_attributes
|
140
|
+
)
|
141
|
+
end
|
142
|
+
|
143
|
+
def param_categories
|
144
|
+
if params[:category] && params[:category].length > 0
|
145
|
+
params[:category].map { |k, _| Category.find(k.to_i) }
|
146
|
+
else
|
147
|
+
[]
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def find_page
|
152
|
+
@page = Page.find(params[:id]).localize(@locale)
|
153
|
+
end
|
154
|
+
|
155
|
+
def find_categories
|
156
|
+
@categories = Category.order("name")
|
157
|
+
end
|
158
|
+
|
159
|
+
def find_news_pages
|
160
|
+
@news_pages = Page.news_pages.in_locale(@locale)
|
161
|
+
return if @news_pages.any?
|
162
|
+
redirect_to(admin_pages_url(@locale))
|
163
|
+
end
|
164
|
+
|
165
|
+
# Redirect away if no news pages has been configured
|
166
|
+
def require_news_pages
|
167
|
+
return if Page.news_pages.any?
|
168
|
+
redirect_to(admin_pages_url(@locale))
|
169
|
+
end
|
170
|
+
|
171
|
+
def year_and_month(archive_finder)
|
172
|
+
if params[:year] && params[:month]
|
173
|
+
[params[:year], params[:month]].map(&:to_i)
|
174
|
+
else
|
175
|
+
archive_finder.latest_year_and_month
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Admin
|
4
|
+
class PasswordResetsController < Admin::AdminController
|
5
|
+
before_action :find_password_reset_token, only: [:show, :update]
|
6
|
+
before_action :check_for_expired_token, only: [:show, :update]
|
7
|
+
before_action :require_authentication, except: [:create, :show, :update]
|
8
|
+
|
9
|
+
layout "admin"
|
10
|
+
|
11
|
+
def create
|
12
|
+
if params[:username] &&
|
13
|
+
@user = User.find_by_username_or_email(params[:username])
|
14
|
+
@password_reset_token = @user.password_reset_tokens.create
|
15
|
+
deliver_password_reset(@user, @password_reset_token)
|
16
|
+
flash[:notice] = "An email with further instructions has been sent"
|
17
|
+
else
|
18
|
+
flash[:notice] = "Couldn't find a user with that email address"
|
19
|
+
end
|
20
|
+
redirect_to login_url
|
21
|
+
end
|
22
|
+
|
23
|
+
def show
|
24
|
+
@user = @password_reset_token.user
|
25
|
+
end
|
26
|
+
|
27
|
+
def update
|
28
|
+
@user = @password_reset_token.user
|
29
|
+
if !user_params[:password].blank? && @user.update(user_params)
|
30
|
+
@password_reset_token.destroy
|
31
|
+
authenticate!(@user)
|
32
|
+
flash[:notice] = "Your password has been changed"
|
33
|
+
redirect_to login_url
|
34
|
+
else
|
35
|
+
render action: :show
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def deliver_password_reset(user, password_reset)
|
42
|
+
AdminMailer.password_reset(
|
43
|
+
user,
|
44
|
+
admin_password_reset_with_token_url(
|
45
|
+
password_reset, password_reset.token
|
46
|
+
)
|
47
|
+
).deliver_now
|
48
|
+
end
|
49
|
+
|
50
|
+
def login_url
|
51
|
+
# TODO: Validate URL
|
52
|
+
params[:login_url] || login_admin_users_url
|
53
|
+
end
|
54
|
+
|
55
|
+
def user_params
|
56
|
+
params.require(:user).permit(:password, :confirm_password)
|
57
|
+
end
|
58
|
+
|
59
|
+
def valid_token?(pr)
|
60
|
+
pr && secure_compare(pr.token, params[:token])
|
61
|
+
end
|
62
|
+
|
63
|
+
def find_password_reset_token
|
64
|
+
@password_reset_token = begin
|
65
|
+
PasswordResetToken.find(params[:id])
|
66
|
+
rescue ActiveRecord::RecordNotFound
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
|
70
|
+
return if valid_token?(@password_reset_token)
|
71
|
+
|
72
|
+
flash[:notice] = "Invalid password reset request"
|
73
|
+
redirect_to(login_url) && return
|
74
|
+
end
|
75
|
+
|
76
|
+
def check_for_expired_token
|
77
|
+
return unless @password_reset_token.expired?
|
78
|
+
@password_reset_token.destroy
|
79
|
+
flash[:notice] = "Your password reset link has expired"
|
80
|
+
redirect_to(login_url)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Admin
|
4
|
+
class UsersController < Admin::AdminController
|
5
|
+
before_action :require_authentication, except: [:new, :create, :login]
|
6
|
+
before_action :require_no_users, only: [:new, :create]
|
7
|
+
before_action(
|
8
|
+
:find_user,
|
9
|
+
only: [:edit, :update, :show, :destroy, :delete_image]
|
10
|
+
)
|
11
|
+
|
12
|
+
require_authorization(
|
13
|
+
User,
|
14
|
+
proc { @user },
|
15
|
+
member: [:delete_image, :update, :destroy, :edit],
|
16
|
+
collection: [:index, :deactivated, :new, :create]
|
17
|
+
)
|
18
|
+
|
19
|
+
def index
|
20
|
+
@users = User.activated
|
21
|
+
@invites = Invite.all.order("created_at DESC")
|
22
|
+
end
|
23
|
+
|
24
|
+
def deactivated
|
25
|
+
@users = User.deactivated
|
26
|
+
@invites = []
|
27
|
+
end
|
28
|
+
|
29
|
+
def login
|
30
|
+
return unless logged_in?
|
31
|
+
redirect_to admin_default_url
|
32
|
+
end
|
33
|
+
|
34
|
+
def new
|
35
|
+
@user = User.new
|
36
|
+
end
|
37
|
+
|
38
|
+
def create
|
39
|
+
@user = User.create(user_params)
|
40
|
+
if @user.valid?
|
41
|
+
authenticate!(@user)
|
42
|
+
redirect_to admin_default_url
|
43
|
+
else
|
44
|
+
render action: :new
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def show
|
49
|
+
end
|
50
|
+
|
51
|
+
def edit
|
52
|
+
end
|
53
|
+
|
54
|
+
def update
|
55
|
+
if @user.update(user_params)
|
56
|
+
flash[:notice] = "Your changed to #{@user.name} were saved."
|
57
|
+
redirect_to admin_users_url
|
58
|
+
else
|
59
|
+
flash.now[:error] = "There were problems saving your changes."
|
60
|
+
render action: :edit
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def destroy
|
65
|
+
@user = User.find(params[:id])
|
66
|
+
flash[:notice] = "User <strong>#{@user.email}</strong> has been deleted"
|
67
|
+
@user.destroy
|
68
|
+
redirect_to admin_users_url
|
69
|
+
end
|
70
|
+
|
71
|
+
def delete_image
|
72
|
+
@user.image.destroy
|
73
|
+
respond_to do |format|
|
74
|
+
format.js { render text: "The profile picture has been deleted." }
|
75
|
+
format.html { redirect_to(edit_admin_user_url(@user)) }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
protected
|
80
|
+
|
81
|
+
def find_user
|
82
|
+
@user = User.find(params[:id])
|
83
|
+
end
|
84
|
+
|
85
|
+
def user_params
|
86
|
+
permitted_params = [
|
87
|
+
:name, :email, :image
|
88
|
+
]
|
89
|
+
permitted_params += [:activated, role_names: []] if policy(User).manage?
|
90
|
+
if !User.any? || (@user && policy(@user).change_password?)
|
91
|
+
permitted_params += [:password, :confirm_password]
|
92
|
+
end
|
93
|
+
params.require(:user).permit(permitted_params)
|
94
|
+
end
|
95
|
+
|
96
|
+
def require_no_users
|
97
|
+
return unless User.any?
|
98
|
+
flash[:error] = "Account holder already exists"
|
99
|
+
redirect_to(admin_users_url)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|