udongo 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +26 -0
- data/app/assets/fonts/FontAwesome.otf +0 -0
- data/app/assets/fonts/fontawesome-webfont.eot +0 -0
- data/app/assets/fonts/fontawesome-webfont.svg +685 -0
- data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
- data/app/assets/fonts/fontawesome-webfont.woff +0 -0
- data/app/assets/fonts/fontawesome-webfont.woff2 +0 -0
- data/app/assets/javascripts/backend/application.js +22 -0
- data/app/assets/javascripts/backend/bootstrap.js +3560 -0
- data/app/assets/javascripts/backend/datepickers.js +67 -0
- data/app/assets/javascripts/backend/general.js +7 -0
- data/app/assets/javascripts/backend/pages.js +7 -0
- data/app/assets/javascripts/backend/plugins/autocomplete.js +147 -0
- data/app/assets/javascripts/backend/plugins/tagbox.js +52 -0
- data/app/assets/javascripts/backend/sortable.js +46 -0
- data/app/assets/javascripts/backend/tags.js +37 -0
- data/app/assets/javascripts/backend/tree.js +158 -0
- data/app/assets/stylesheets/backend/application.scss +18 -0
- data/app/assets/stylesheets/backend/bootstrap.scss +6211 -0
- data/app/assets/stylesheets/backend/components/_breadcrumb.scss +7 -0
- data/app/assets/stylesheets/backend/components/_form.scss +23 -0
- data/app/assets/stylesheets/backend/components/_nav.scss +3 -0
- data/app/assets/stylesheets/backend/components/_navbar.scss +3 -0
- data/app/assets/stylesheets/backend/components/_tabs.scss +3 -0
- data/app/assets/stylesheets/backend/font-awesome.scss +2182 -0
- data/app/assets/stylesheets/backend/pages/_flexible_content.scss +11 -0
- data/app/assets/stylesheets/backend/pages/_logged_in.scss +3 -0
- data/app/assets/stylesheets/backend/pages/_login.scss +3 -0
- data/app/assets/stylesheets/backend/udongo.scss +17 -0
- data/app/controllers/backend/admins_controller.rb +56 -0
- data/app/controllers/backend/content/rows/columns_controller.rb +75 -0
- data/app/controllers/backend/content/rows/images_controller.rb +6 -0
- data/app/controllers/backend/content/rows/texts_controller.rb +6 -0
- data/app/controllers/backend/content/rows_controller.rb +45 -0
- data/app/controllers/backend/dashboard_controller.rb +2 -0
- data/app/controllers/backend/email_templates_controller.rb +50 -0
- data/app/controllers/backend/emails_controller.rb +18 -0
- data/app/controllers/backend/navigation/items_controller.rb +64 -0
- data/app/controllers/backend/navigations_controller.rb +7 -0
- data/app/controllers/backend/pages_controller.rb +89 -0
- data/app/controllers/backend/redirects_controller.rb +50 -0
- data/app/controllers/backend/seo_controller.rb +6 -0
- data/app/controllers/backend/sessions_controller.rb +22 -0
- data/app/controllers/backend/snippets_controller.rb +49 -0
- data/app/controllers/backend/tagbox_controller.rb +52 -0
- data/app/controllers/backend/webserver_controller.rb +6 -0
- data/app/controllers/backend_controller.rb +34 -0
- data/app/controllers/catch_all_controller.rb +12 -0
- data/app/controllers/concerns/backend/content_type_controller.rb +44 -0
- data/app/controllers/concerns/backend/positionable_controller.rb +12 -0
- data/app/controllers/concerns/backend/translatable_controller.rb +41 -0
- data/app/controllers/concerns/pagination_controller.rb +38 -0
- data/app/controllers/redirects_controller.rb +18 -0
- data/app/decorators/content_image_decorator.rb +7 -0
- data/app/decorators/content_text_decorator.rb +11 -0
- data/app/decorators/navigation_item_decorator.rb +29 -0
- data/app/decorators/page_decorator.rb +29 -0
- data/app/decorators/redirect_decorator.rb +13 -0
- data/app/decorators/snippet_decorator.rb +11 -0
- data/app/forms/backend/email_template_translation_form.rb +11 -0
- data/app/forms/backend/navigation_item_translation_form.rb +8 -0
- data/app/forms/backend/page_translation_form.rb +17 -0
- data/app/forms/backend/snippet_translation_form.rb +8 -0
- data/app/helpers/backend/dropdown_helper.rb +9 -0
- data/app/helpers/backend/pagination_helper.rb +17 -0
- data/app/helpers/icon_helper.rb +6 -0
- data/app/helpers/link_helper.rb +33 -0
- data/app/helpers/snippet_helper.rb +5 -0
- data/app/helpers/udongo_helper.rb +27 -0
- data/app/inputs/date_picker_input.rb +30 -0
- data/app/inputs/date_range_picker_input.rb +13 -0
- data/app/mailers/general_mailer.rb +13 -0
- data/app/models/address.rb +5 -0
- data/app/models/admin.rb +9 -0
- data/app/models/ckeditor/asset.rb +7 -0
- data/app/models/ckeditor/attachment_file.rb +7 -0
- data/app/models/ckeditor/picture.rb +7 -0
- data/app/models/comment.rb +39 -0
- data/app/models/concerns/cacheable.rb +37 -0
- data/app/models/concerns/commentable.rb +9 -0
- data/app/models/concerns/content_type.rb +13 -0
- data/app/models/concerns/deletable.rb +13 -0
- data/app/models/concerns/draggable.rb +13 -0
- data/app/models/concerns/emailable.rb +7 -0
- data/app/models/concerns/flexible_content.rb +9 -0
- data/app/models/concerns/locale.rb +10 -0
- data/app/models/concerns/loggable.rb +13 -0
- data/app/models/concerns/notable.rb +9 -0
- data/app/models/concerns/parentable.rb +39 -0
- data/app/models/concerns/person.rb +7 -0
- data/app/models/concerns/publishable.rb +22 -0
- data/app/models/concerns/seo.rb +31 -0
- data/app/models/concerns/sortable.rb +30 -0
- data/app/models/concerns/spammable.rb +38 -0
- data/app/models/concerns/storable/collection.rb +117 -0
- data/app/models/concerns/storable/config.rb +40 -0
- data/app/models/concerns/storable.rb +32 -0
- data/app/models/concerns/taggable.rb +29 -0
- data/app/models/concerns/translatable/collection.rb +60 -0
- data/app/models/concerns/translatable/config.rb +19 -0
- data/app/models/concerns/translatable.rb +39 -0
- data/app/models/concerns/visible.rb +24 -0
- data/app/models/content_column.rb +14 -0
- data/app/models/content_image.rb +9 -0
- data/app/models/content_row.rb +11 -0
- data/app/models/content_text.rb +7 -0
- data/app/models/email.rb +13 -0
- data/app/models/email_template.rb +10 -0
- data/app/models/form.rb +9 -0
- data/app/models/form_field.rb +15 -0
- data/app/models/form_field_validation.rb +11 -0
- data/app/models/form_submission.rb +16 -0
- data/app/models/form_submission_data.rb +5 -0
- data/app/models/log.rb +7 -0
- data/app/models/meta.rb +11 -0
- data/app/models/navigation.rb +6 -0
- data/app/models/navigation_item.rb +12 -0
- data/app/models/note.rb +7 -0
- data/app/models/page.rb +23 -0
- data/app/models/queued_task.rb +45 -0
- data/app/models/redirect.rb +16 -0
- data/app/models/setting.rb +13 -0
- data/app/models/snippet.rb +10 -0
- data/app/models/store.rb +10 -0
- data/app/models/tag.rb +6 -0
- data/app/models/tagged_item.rb +8 -0
- data/app/models/translation.rb +10 -0
- data/app/uploaders/ckeditor_attachment_file_uploader.rb +36 -0
- data/app/uploaders/ckeditor_picture_uploader.rb +47 -0
- data/app/uploaders/content_image_uploader.rb +52 -0
- data/app/validators/email_validator.rb +7 -0
- data/app/validators/url_validator.rb +13 -0
- data/app/views/backend/_breadcrumbs.html.erb +18 -0
- data/app/views/backend/_flash_messages.html.erb +9 -0
- data/app/views/backend/_form_actions.html.erb +4 -0
- data/app/views/backend/_form_errors.html.erb +15 -0
- data/app/views/backend/_navigation.html.erb +8 -0
- data/app/views/backend/_seo_form.html.erb +13 -0
- data/app/views/backend/_tags.html.erb +18 -0
- data/app/views/backend/admins/_form.html.erb +32 -0
- data/app/views/backend/admins/edit.html.erb +4 -0
- data/app/views/backend/admins/index.html.erb +33 -0
- data/app/views/backend/admins/new.html.erb +4 -0
- data/app/views/backend/content/_image.html.erb +17 -0
- data/app/views/backend/content/_rows.html.erb +63 -0
- data/app/views/backend/content/_text.html.erb +1 -0
- data/app/views/backend/content/rows/columns/edit.html.erb +25 -0
- data/app/views/backend/content/rows/columns/new.html.erb +25 -0
- data/app/views/backend/content/rows/images/edit.html.erb +22 -0
- data/app/views/backend/content/rows/texts/edit.html.erb +13 -0
- data/app/views/backend/dashboard/show.html.erb +1 -0
- data/app/views/backend/email_templates/_form.html.erb +31 -0
- data/app/views/backend/email_templates/_tabs.html.erb +21 -0
- data/app/views/backend/email_templates/edit.html.erb +6 -0
- data/app/views/backend/email_templates/edit_translation.html.erb +51 -0
- data/app/views/backend/email_templates/index.html.erb +27 -0
- data/app/views/backend/email_templates/new.html.erb +4 -0
- data/app/views/backend/emails/index.html.erb +50 -0
- data/app/views/backend/emails/show.html.erb +68 -0
- data/app/views/backend/navigation/items/_form.html.erb +22 -0
- data/app/views/backend/navigation/items/_tabs.html.erb +21 -0
- data/app/views/backend/navigation/items/edit.html.erb +7 -0
- data/app/views/backend/navigation/items/edit_translation.html.erb +21 -0
- data/app/views/backend/navigation/items/new.html.erb +4 -0
- data/app/views/backend/navigations/index.html.erb +59 -0
- data/app/views/backend/pages/_form.html.erb +30 -0
- data/app/views/backend/pages/_tabs.html.erb +21 -0
- data/app/views/backend/pages/edit.html.erb +6 -0
- data/app/views/backend/pages/edit_translation.html.erb +35 -0
- data/app/views/backend/pages/index.html.erb +19 -0
- data/app/views/backend/pages/new.html.erb +4 -0
- data/app/views/backend/redirects/_filter.html.erb +21 -0
- data/app/views/backend/redirects/_form.html.erb +36 -0
- data/app/views/backend/redirects/edit.html.erb +4 -0
- data/app/views/backend/redirects/index.html.erb +50 -0
- data/app/views/backend/redirects/new.html.erb +3 -0
- data/app/views/backend/sessions/new.html.erb +19 -0
- data/app/views/backend/snippets/_form.html.erb +18 -0
- data/app/views/backend/snippets/_tabs.html.erb +21 -0
- data/app/views/backend/snippets/edit.html.erb +6 -0
- data/app/views/backend/snippets/edit_translation.html.erb +23 -0
- data/app/views/backend/snippets/index.html.erb +26 -0
- data/app/views/backend/snippets/new.html.erb +4 -0
- data/app/views/layouts/backend/_top_navigation.html.erb +27 -0
- data/app/views/layouts/backend/application.html.erb +27 -0
- data/app/views/layouts/backend/lightbox.html.erb +21 -0
- data/app/views/layouts/backend/login.html.erb +21 -0
- data/app/views/layouts/frontend/application.html.erb +16 -0
- data/config/initializers/assets.rb +13 -0
- data/config/initializers/ckeditor.rb +38 -0
- data/config/initializers/core_ext/string.rb +8 -0
- data/config/initializers/inflections.rb +20 -0
- data/config/initializers/simple_form_bootstrap.rb +150 -0
- data/config/locales/de.yml +196 -0
- data/config/locales/en.yml +206 -0
- data/config/locales/fr.yml +214 -0
- data/config/locales/nl.yml +212 -0
- data/config/locales/nl_backend.yml +106 -0
- data/config/locales/nl_forms.yml +68 -0
- data/config/routes.rb +83 -0
- data/config/spring.rb +1 -0
- data/db/migrate/20150404133314_create_udongo_admins.rb +12 -0
- data/db/migrate/20150404203549_remove_udongo_admins.rb +5 -0
- data/db/migrate/20150404203648_add_admins_table.rb +12 -0
- data/db/migrate/20150405202002_create_logs.rb +15 -0
- data/db/migrate/20150411152042_create_addresses.rb +19 -0
- data/db/migrate/20150411152619_create_comments.rb +21 -0
- data/db/migrate/20150411200227_create_notes.rb +14 -0
- data/db/migrate/20150412094419_create_settings.rb +13 -0
- data/db/migrate/20150412095257_create_meta.rb +21 -0
- data/db/migrate/20150413190019_create_tags.rb +15 -0
- data/db/migrate/20150413190713_create_tagged_items.rb +14 -0
- data/db/migrate/20150417113400_create_translations.rb +15 -0
- data/db/migrate/20150515113332_content_tables.rb +42 -0
- data/db/migrate/20150515134044_create_pages.rb +22 -0
- data/db/migrate/20150620121834_remove_trashed_from_page.rb +5 -0
- data/db/migrate/20150629120253_add_locales_to_translatables.rb +5 -0
- data/db/migrate/20150706083925_create_snippets.rb +13 -0
- data/db/migrate/20150706084145_add_locales_to_snippet.rb +5 -0
- data/db/migrate/20150706085213_add_description_to_snippet.rb +5 -0
- data/db/migrate/20150706085733_change_snippet_desc_field.rb +5 -0
- data/db/migrate/20150706093016_change_desc_column_for_snippet.rb +5 -0
- data/db/migrate/20150706113918_create_ckeditor_assets.rb +26 -0
- data/db/migrate/20150824090457_create_redirects.rb +12 -0
- data/db/migrate/20150824113723_rename_source_and_destination_to_redirects.rb +6 -0
- data/db/migrate/20150825094254_create_shortened_urls.rb +11 -0
- data/db/migrate/20150826084004_remove_shortened_urls.rb +5 -0
- data/db/migrate/20150826084234_add_times_used_to_redirect.rb +5 -0
- data/db/migrate/20150826134153_add_index_on_page_visible.rb +5 -0
- data/db/migrate/20151003191846_add_some_indexes.rb +15 -0
- data/db/migrate/20151006131720_add_editable_content_to_page.rb +5 -0
- data/db/migrate/20151007090541_create_navigations.rb +10 -0
- data/db/migrate/20151007091131_create_navigation_items.rb +12 -0
- data/db/migrate/20151007092529_add_index_to_nav_items.rb +5 -0
- data/db/migrate/20151007093812_change_nav_description_type.rb +5 -0
- data/db/migrate/20151007173557_add_route_to_page.rb +5 -0
- data/db/migrate/20151008114433_add_extra_to_navigation_item.rb +5 -0
- data/db/migrate/20151009114823_create_forms.rb +9 -0
- data/db/migrate/20151009115326_create_form_fields.rb +12 -0
- data/db/migrate/20151009115803_create_form_field_validations.rb +11 -0
- data/db/migrate/20151009131957_create_form_submissions.rb +10 -0
- data/db/migrate/20151009132657_create_form_submission_data.rb +11 -0
- data/db/migrate/20151009140754_rename_form_field_id_to_field_id_for_form_field_validations.rb +5 -0
- data/db/migrate/20151009141123_rename_form_submission_id_to_submission_id_for_form_submission_data.rb +5 -0
- data/db/migrate/20151009141822_add_locales_to_form_fields.rb +5 -0
- data/db/migrate/20151009142242_add_locales_to_form_field_validations.rb +5 -0
- data/db/migrate/20151023135358_add_locales_to_forms.rb +5 -0
- data/db/migrate/20151117190950_add_external_reference_to_tags.rb +6 -0
- data/db/migrate/20151205202815_rename_nav_name_to_identifier.rb +5 -0
- data/db/migrate/20160108100104_create_stores.rb +13 -0
- data/db/migrate/20160125154648_rename_name_to_identifier_for_forms.rb +5 -0
- data/db/migrate/20160128080029_create_email_templates.rb +18 -0
- data/db/migrate/20160201121021_create_emails.rb +17 -0
- data/db/migrate/20160201123128_create_queued_tasks.rb +13 -0
- data/db/migrate/20160205132009_reoraganize_snippet_html_fields.rb +7 -0
- data/db/migrate/20160303141417_add_data_to_logs.rb +5 -0
- data/db/migrate/20160513110925_addd_more_column_widths.rb +9 -0
- data/lib/generators/udongo/form/form_generator.rb +63 -0
- data/lib/generators/udongo/form/templates/form.rb +18 -0
- data/lib/tasks/task_extras.rb +10 -0
- data/lib/tasks/udongo_tasks.rake +41 -0
- data/lib/udongo/active_model_simulator.rb +21 -0
- data/lib/udongo/assets/loader.rb +40 -0
- data/lib/udongo/assets/precompiler.rb +50 -0
- data/lib/udongo/breadcrumb.rb +27 -0
- data/lib/udongo/config.rb +26 -0
- data/lib/udongo/crypt.rb +19 -0
- data/lib/udongo/cryptography.rb +5 -0
- data/lib/udongo/email_vars/address.rb +19 -0
- data/lib/udongo/email_vars/form_submission.rb +18 -0
- data/lib/udongo/email_vars_parser.rb +31 -0
- data/lib/udongo/engine.rb +10 -0
- data/lib/udongo/meta_info.rb +12 -0
- data/lib/udongo/object_path.rb +24 -0
- data/lib/udongo/version.rb +3 -0
- data/lib/udongo/will_paginate/renderer.rb +26 -0
- data/lib/udongo.rb +44 -0
- metadata +772 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
@charset "utf-8";
|
2
|
+
|
3
|
+
// Base
|
4
|
+
// fonts
|
5
|
+
@import 'font-awesome';
|
6
|
+
|
7
|
+
// Components
|
8
|
+
@import 'components/navbar';
|
9
|
+
@import 'components/tabs';
|
10
|
+
@import 'components/breadcrumb';
|
11
|
+
@import 'components/form';
|
12
|
+
@import 'components/nav';
|
13
|
+
|
14
|
+
// Page specific styles
|
15
|
+
@import 'pages/login';
|
16
|
+
@import 'pages/logged_in';
|
17
|
+
@import 'pages/flexible_content';
|
@@ -0,0 +1,56 @@
|
|
1
|
+
class Backend::AdminsController < BackendController
|
2
|
+
before_action :find_admin, only: [:show, :edit, :update, :destroy]
|
3
|
+
before_action -> { breadcrumb.add t('b.admins'), backend_admins_path }
|
4
|
+
|
5
|
+
def index
|
6
|
+
@admins = ::Admin.all
|
7
|
+
end
|
8
|
+
|
9
|
+
def show
|
10
|
+
redirect_to edit_backend_admin_path(@admin)
|
11
|
+
end
|
12
|
+
|
13
|
+
def new
|
14
|
+
@admin = ::Admin.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def create
|
18
|
+
@admin = ::Admin.new allowed_params
|
19
|
+
|
20
|
+
if @admin.save
|
21
|
+
redirect_to backend_admins_path, notice: t('b.msg.admins.added')
|
22
|
+
else
|
23
|
+
render :new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def update
|
28
|
+
if @admin.update_attributes allowed_params
|
29
|
+
redirect_to backend_admins_path, notice: t('b.msg.changes_saved')
|
30
|
+
else
|
31
|
+
render :edit
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
@admin.destroy
|
37
|
+
redirect_to backend_admins_path, notice: t('b.msg.admins.deleted')
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def find_admin
|
43
|
+
@admin = ::Admin.find params[:id]
|
44
|
+
end
|
45
|
+
|
46
|
+
def allowed_params
|
47
|
+
params[:admin].permit(
|
48
|
+
:first_name, :last_name, :email, :password, :password_confirmation
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def password_required?
|
53
|
+
@admin.new_record?
|
54
|
+
end
|
55
|
+
helper_method :password_required?
|
56
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
class Backend::Content::Rows::ColumnsController < BackendController
|
2
|
+
before_action :find_row
|
3
|
+
before_action :find_column, only: [:edit, :update, :move_up, :move_down, :destroy]
|
4
|
+
layout 'backend/lightbox'
|
5
|
+
|
6
|
+
def new
|
7
|
+
@column = @row.columns.new
|
8
|
+
cancel_url
|
9
|
+
end
|
10
|
+
|
11
|
+
def create
|
12
|
+
@column = @row.columns.new allowed_params
|
13
|
+
|
14
|
+
if @column.save
|
15
|
+
@column.content = @column.content_type.constantize.create!
|
16
|
+
@column.save!
|
17
|
+
|
18
|
+
redirect_to_edit @column
|
19
|
+
else
|
20
|
+
render :new
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def update
|
25
|
+
if @column.update_attributes allowed_params
|
26
|
+
redirect_to cancel_url
|
27
|
+
else
|
28
|
+
render :edit
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def move_up
|
33
|
+
@column.move_higher
|
34
|
+
redirect_to cancel_url
|
35
|
+
end
|
36
|
+
|
37
|
+
def move_down
|
38
|
+
@column.move_lower
|
39
|
+
redirect_to cancel_url
|
40
|
+
end
|
41
|
+
|
42
|
+
def destroy
|
43
|
+
@column.destroy
|
44
|
+
|
45
|
+
path = "edit_translation_backend_#{@column.row.rowable.class.to_s.downcase}_path"
|
46
|
+
redirect_to send(path, @column.row.rowable, @column.row.locale, anchor: "content-row-#{@column.row.id}")
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def find_row
|
52
|
+
@row = ::ContentRow.find params[:row_id]
|
53
|
+
end
|
54
|
+
|
55
|
+
def find_column
|
56
|
+
@column = ::ContentColumn.find params[:id]
|
57
|
+
end
|
58
|
+
|
59
|
+
def allowed_params
|
60
|
+
params.require(:content_column).permit(
|
61
|
+
:width_xs, :width_sm, :width_md, :width_lg, :width_xl, :content_type
|
62
|
+
)
|
63
|
+
end
|
64
|
+
|
65
|
+
def redirect_to_edit(column)
|
66
|
+
redirect_to send("edit_backend_content_#{column.content.decorate.content_type}_path", column.content)
|
67
|
+
end
|
68
|
+
|
69
|
+
def cancel_url
|
70
|
+
instance = @row.rowable
|
71
|
+
path = "edit_translation_backend_#{instance.class.to_s.downcase}_path"
|
72
|
+
send(path, instance, @row.locale, anchor: "content-row-#{@row.id}")
|
73
|
+
end
|
74
|
+
helper_method :cancel_url
|
75
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class Backend::Content::RowsController < BackendController
|
2
|
+
before_action :find_row, only: [:move_up, :move_down, :destroy]
|
3
|
+
|
4
|
+
def new
|
5
|
+
if params[:klass] && params[:id] && params[:locale]
|
6
|
+
instance = params[:klass].constantize.find params[:id]
|
7
|
+
row = instance.content_rows.create!(locale: params[:locale])
|
8
|
+
|
9
|
+
redirect_to content_path(instance, params[:locale], "content-row-#{row.id}")
|
10
|
+
else
|
11
|
+
render text: 'Insufficient params. Please provide klass, id and locale.'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def move_up
|
16
|
+
@row.move_higher
|
17
|
+
redirect_back_to_content
|
18
|
+
end
|
19
|
+
|
20
|
+
def move_down
|
21
|
+
@row.move_lower
|
22
|
+
redirect_back_to_content
|
23
|
+
end
|
24
|
+
|
25
|
+
def destroy
|
26
|
+
@row.destroy
|
27
|
+
redirect_back_to_content('content-rows')
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def find_row
|
33
|
+
@row = ::ContentRow.find params[:id]
|
34
|
+
end
|
35
|
+
|
36
|
+
def content_path(instance, locale, anchor)
|
37
|
+
path = "edit_translation_backend_#{instance.class.to_s.downcase}_path"
|
38
|
+
send(path, instance, locale, anchor: anchor)
|
39
|
+
end
|
40
|
+
|
41
|
+
def redirect_back_to_content(anchor = nil)
|
42
|
+
anchor = "content-row-#{@row.id}" unless anchor.present?
|
43
|
+
redirect_to content_path(@row.rowable, @row.locale, anchor)
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class Backend::EmailTemplatesController < BackendController
|
2
|
+
include Concerns::Backend::TranslatableController
|
3
|
+
include Concerns::Backend::PositionableController
|
4
|
+
|
5
|
+
before_action :find_model, only: [:edit, :update]
|
6
|
+
before_action -> { breadcrumb.add t('b.email_templates'), backend_email_templates_path }
|
7
|
+
|
8
|
+
def index
|
9
|
+
@email_templates = ::EmailTemplate.all
|
10
|
+
end
|
11
|
+
|
12
|
+
def new
|
13
|
+
@model = ::EmailTemplate.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def create
|
17
|
+
@model = ::EmailTemplate.new allowed_params
|
18
|
+
|
19
|
+
if @model.save
|
20
|
+
redirect_to edit_translation_backend_email_template_path(@model, translation_locale: default_locale), notice: translate_notice(:added, :email_template)
|
21
|
+
else
|
22
|
+
render :new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def update
|
27
|
+
if @model.update_attributes(allowed_params)
|
28
|
+
redirect_to edit_backend_email_template_path(@model), notice: translate_notice(:edited, :email_template)
|
29
|
+
else
|
30
|
+
render :edit
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def find_model
|
37
|
+
@model = ::EmailTemplate.find params[:id]
|
38
|
+
end
|
39
|
+
|
40
|
+
def translation_form
|
41
|
+
Backend::EmailTemplateTranslationForm.new(
|
42
|
+
email_template: @model,
|
43
|
+
translation: @model.translation(params[:translation_locale])
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
def allowed_params
|
48
|
+
params.require('email_template').permit(:identifier, :description, :from_name, :from_email)
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Backend::EmailsController < BackendController
|
2
|
+
include Concerns::PaginationController
|
3
|
+
|
4
|
+
before_action -> { breadcrumb.add t('b.emails'), backend_emails_path }
|
5
|
+
|
6
|
+
def index
|
7
|
+
@emails = paginate ::Email.all.order('id DESC')
|
8
|
+
end
|
9
|
+
|
10
|
+
def show
|
11
|
+
@email = ::Email.find params[:id]
|
12
|
+
end
|
13
|
+
|
14
|
+
def html_content
|
15
|
+
@email = ::Email.find params[:id]
|
16
|
+
render text: @email.html_content
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class Backend::Navigation::ItemsController < BackendController
|
2
|
+
include Concerns::Backend::TranslatableController
|
3
|
+
include Concerns::Backend::PositionableController
|
4
|
+
|
5
|
+
before_action :find_navigation
|
6
|
+
before_action :find_model, only: [:edit, :update, :destroy]
|
7
|
+
before_action { breadcrumb.add t('b.navigation'), backend_navigations_path }
|
8
|
+
|
9
|
+
def new
|
10
|
+
@model = @navigation.items.new.decorate
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@model = @navigation.items.new(allowed_params).decorate
|
15
|
+
|
16
|
+
if @model.save
|
17
|
+
redirect_to backend_navigations_path, notice: t('b.msg.navigation.added')
|
18
|
+
else
|
19
|
+
render :new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def update
|
24
|
+
if @model.update_attributes allowed_params
|
25
|
+
redirect_to backend_navigations_path, notice: t('b.msg.changes_saved')
|
26
|
+
else
|
27
|
+
render :edit
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def destroy
|
32
|
+
@model.destroy
|
33
|
+
redirect_to backend_navigations_path, notice: t('b.msg.navigation.deleted')
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def find_navigation
|
39
|
+
@navigation = ::Navigation.find params[:navigation_id]
|
40
|
+
end
|
41
|
+
|
42
|
+
def find_model
|
43
|
+
@model = ::NavigationItem.find(params[:id]).decorate
|
44
|
+
end
|
45
|
+
|
46
|
+
def allowed_params
|
47
|
+
params[:navigation_item].permit(:page_id, :extra)
|
48
|
+
end
|
49
|
+
|
50
|
+
def translation_form
|
51
|
+
Backend::NavigationItemTranslationForm.new(
|
52
|
+
navigation_item: @model,
|
53
|
+
translation: @model.translation(params[:translation_locale])
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
57
|
+
def translatable_path
|
58
|
+
edit_translation_backend_navigation_item_path(
|
59
|
+
@navigation,
|
60
|
+
@model,
|
61
|
+
params[:translation_locale]
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
class Backend::PagesController < BackendController
|
2
|
+
include Concerns::Backend::TranslatableController
|
3
|
+
|
4
|
+
before_action :find_model, only: [:edit, :update, :tree_drag_and_drop, :destroy]
|
5
|
+
before_action -> { breadcrumb.add t('b.pages'), backend_pages_path }
|
6
|
+
|
7
|
+
def index
|
8
|
+
@pages = ::Page.all
|
9
|
+
|
10
|
+
respond_to do |format|
|
11
|
+
format.html
|
12
|
+
format.json {
|
13
|
+
render json: page_tree_data.to_json
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def new
|
19
|
+
@model = ::Page.new.decorate
|
20
|
+
end
|
21
|
+
|
22
|
+
def create
|
23
|
+
@model = ::Page.new(params.require('page').permit(:description, :visible, :parent_id)).decorate
|
24
|
+
|
25
|
+
if @model.save
|
26
|
+
redirect_to edit_backend_page_path(@model), notice: translate_notice(:added, :page)
|
27
|
+
else
|
28
|
+
render :new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def update
|
33
|
+
if @model.update_attributes(params.require('page').permit(:description, :visible, :parent_id))
|
34
|
+
redirect_to edit_backend_page_path(@model), notice: translate_notice(:edited, :page)
|
35
|
+
else
|
36
|
+
render :edit
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def tree_drag_and_drop
|
41
|
+
render json: { moved: @model.set_position(params[:position], params[:parent_id]) }
|
42
|
+
end
|
43
|
+
|
44
|
+
def edit_translation
|
45
|
+
end
|
46
|
+
|
47
|
+
def destroy
|
48
|
+
render json: { trashed: @model.destroy }
|
49
|
+
end
|
50
|
+
|
51
|
+
def page_tree_data(parent_id: nil)
|
52
|
+
::Page.where(parent_id: parent_id).inject([]) do |data, p|
|
53
|
+
hash = node_data p
|
54
|
+
hash[:children] = page_tree_data(parent_id: p.id) if p.children.any?
|
55
|
+
data << hash
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def find_model
|
62
|
+
@model = ::Page.find(params[:id]).decorate
|
63
|
+
end
|
64
|
+
|
65
|
+
def translation_form
|
66
|
+
Backend::PageTranslationForm.new(
|
67
|
+
page: @model,
|
68
|
+
translation: @model.translation(params[:translation_locale]),
|
69
|
+
seo: @model.seo(params[:translation_locale])
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
def node_data(page)
|
74
|
+
{
|
75
|
+
text: page.description,
|
76
|
+
type: :file,
|
77
|
+
state: { selected: false },
|
78
|
+
data: {
|
79
|
+
id: page.id,
|
80
|
+
url: edit_backend_page_path(page),
|
81
|
+
delete_url: backend_page_path(page, format: :json),
|
82
|
+
deletable: page.deletable?,
|
83
|
+
draggable: page.draggable?,
|
84
|
+
update_position_url: tree_drag_and_drop_backend_page_path(page)
|
85
|
+
},
|
86
|
+
children: []
|
87
|
+
}
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class Backend::RedirectsController < BackendController
|
2
|
+
include Concerns::PaginationController
|
3
|
+
|
4
|
+
before_action -> { breadcrumb.add t('b.redirects'), backend_redirects_path }
|
5
|
+
before_action :find_model, only: [:edit, :update, :destroy]
|
6
|
+
|
7
|
+
def index
|
8
|
+
@search = ::Redirect.ransack params[:q]
|
9
|
+
@redirects = @search.result(distinct: true).order('times_used DESC').page(page_number).per_page(per_page)
|
10
|
+
end
|
11
|
+
|
12
|
+
def new
|
13
|
+
@redirect = ::Redirect.new(status_code: 301).decorate
|
14
|
+
end
|
15
|
+
|
16
|
+
def create
|
17
|
+
@redirect = ::Redirect.new(allowed_params).decorate
|
18
|
+
|
19
|
+
if @redirect.save
|
20
|
+
redirect_to backend_redirects_path, notice: translate_notice(:added, :redirect)
|
21
|
+
else
|
22
|
+
render :new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def destroy
|
27
|
+
@redirect.destroy
|
28
|
+
redirect_to backend_redirects_path, notice: translate_notice(:deleted, :redirect)
|
29
|
+
end
|
30
|
+
|
31
|
+
def update
|
32
|
+
if @redirect.update_attributes allowed_params
|
33
|
+
redirect_to backend_redirects_path, notice: translate_notice(:edited, :redirect)
|
34
|
+
else
|
35
|
+
render :edit
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def allowed_params
|
42
|
+
params.require(:redirect).permit(
|
43
|
+
:source_uri, :destination_uri, :status_code, :disabled
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
def find_model
|
48
|
+
@redirect = ::Redirect.find(params[:id]).decorate
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Backend::SessionsController < BackendController
|
2
|
+
skip_before_action :check_login
|
3
|
+
layout 'backend/login'
|
4
|
+
|
5
|
+
def create
|
6
|
+
admin = ::Admin.find_by(email: params[:session][:email])
|
7
|
+
|
8
|
+
if admin && admin.authenticate(params[:session][:password])
|
9
|
+
session[:admin_id] = admin.id
|
10
|
+
|
11
|
+
redirect_to session[:backend_redirect] ? session[:backend_redirect] : backend_path
|
12
|
+
else
|
13
|
+
flash.now.alert = t 'b.msg.incorrect_login'
|
14
|
+
render :new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def destroy
|
19
|
+
session[:admin_id] = nil
|
20
|
+
redirect_to new_backend_session_path
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
class Backend::SnippetsController < BackendController
|
2
|
+
include Concerns::Backend::TranslatableController
|
3
|
+
|
4
|
+
before_action :find_model, only: [:edit, :update]
|
5
|
+
before_action -> { breadcrumb.add t('b.snippets'), backend_snippets_path }
|
6
|
+
|
7
|
+
def index
|
8
|
+
@snippets = ::Snippet.order(:description)
|
9
|
+
end
|
10
|
+
|
11
|
+
def new
|
12
|
+
@model = ::Snippet.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def create
|
16
|
+
@model = ::Snippet.new allowed_params
|
17
|
+
|
18
|
+
if @model.save
|
19
|
+
redirect_to edit_translation_backend_snippet_path(@model, translation_locale: default_locale), notice: translate_notice(:added, :snippet)
|
20
|
+
else
|
21
|
+
render :new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def update
|
26
|
+
if @model.update_attributes(allowed_params)
|
27
|
+
redirect_to edit_backend_snippet_path(@model), notice: translate_notice(:edited, :snippet)
|
28
|
+
else
|
29
|
+
render :edit
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def find_model
|
36
|
+
@model = ::Snippet.find params[:id]
|
37
|
+
end
|
38
|
+
|
39
|
+
def translation_form
|
40
|
+
Backend::SnippetTranslationForm.new(
|
41
|
+
snippet: @model,
|
42
|
+
translation: @model.translation(params[:translation_locale])
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
def allowed_params
|
47
|
+
params.require('snippet').permit(:identifier, :description)
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
class Backend::TagboxController < BackendController
|
2
|
+
def index
|
3
|
+
tags = ::Tag.by_locale(locale).pluck(:name).map do |name|
|
4
|
+
{ label: name, value: name }
|
5
|
+
end
|
6
|
+
|
7
|
+
render json: tags
|
8
|
+
end
|
9
|
+
|
10
|
+
def create
|
11
|
+
create_tag if tag_creatable?
|
12
|
+
render json: { tag: params[:tag], valid: item_tagged?(find_tag) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def destroy
|
16
|
+
tag = find_tag
|
17
|
+
find_model.tagged_items.where(tag_id: tag.id).destroy_all if tag.present?
|
18
|
+
render json: { success: true }
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def find_model
|
24
|
+
@model ||= params[:taggable_type].to_s.constantize.find params[:taggable_id]
|
25
|
+
end
|
26
|
+
|
27
|
+
def find_tag
|
28
|
+
::Tag.find_by locale: params[:locale], name: params[:tag]
|
29
|
+
end
|
30
|
+
|
31
|
+
def tag_creatable?
|
32
|
+
!::Tag.exists?(tag_params) && Udongo.config.allow_new_tags?
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_tag
|
36
|
+
::Tag.create! tag_params
|
37
|
+
end
|
38
|
+
|
39
|
+
def tag_params
|
40
|
+
{
|
41
|
+
locale: params[:locale],
|
42
|
+
name: params[:tag],
|
43
|
+
slug: params[:tag].parameterize
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
def item_tagged?(tag)
|
48
|
+
return false unless tag
|
49
|
+
find_model.tagged_items.create tag: tag
|
50
|
+
true
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class BackendController < ActionController::Base
|
2
|
+
include Udongo::Cryptography
|
3
|
+
|
4
|
+
layout 'backend/application'
|
5
|
+
before_action :check_login
|
6
|
+
|
7
|
+
def breadcrumb
|
8
|
+
@breadcrumb ||= Udongo::Breadcrumb.new
|
9
|
+
end
|
10
|
+
helper_method :breadcrumb
|
11
|
+
|
12
|
+
def current_admin
|
13
|
+
@current_admin ||= ::Admin.find(session[:admin_id]) if session[:admin_id]
|
14
|
+
end
|
15
|
+
helper_method :current_admin
|
16
|
+
|
17
|
+
def translate_notice(notice, actor)
|
18
|
+
I18n.t("b.msg.#{notice}") % I18n.t("b.#{actor}")
|
19
|
+
end
|
20
|
+
|
21
|
+
def default_locale
|
22
|
+
Udongo.config.default_locale
|
23
|
+
end
|
24
|
+
helper_method :default_locale
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def check_login
|
29
|
+
unless current_admin
|
30
|
+
session[:backend_redirect] = request.url
|
31
|
+
redirect_to new_backend_session_path
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|