knitkit 3.0.0 → 3.2.0
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 +4 -4
- data/{public → app/assets}/images/check.png +0 -0
- data/{public → app/assets}/images/credit_card.png +0 -0
- data/{public → app/assets}/images/inline_edit/close.png +0 -0
- data/{public → app/assets}/images/knitkit/icons/document.png +0 -0
- data/{public → app/assets}/images/knitkit/icons/multi_doc.png +0 -0
- data/{public → app/assets}/images/knitkit/logo.png +0 -0
- data/{public → app/assets}/images/knitkit/splash/images/add-site.png +0 -0
- data/app/assets/images/knitkit/splash/images/add_website_105x105-active.png +0 -0
- data/app/assets/images/knitkit/splash/images/add_website_105x105.png +0 -0
- data/{public → app/assets}/images/knitkit/splash/images/adjust-site.png +0 -0
- data/{public → app/assets}/images/knitkit/splash/images/browse-site.png +0 -0
- data/app/assets/images/knitkit/splash/images/browse_db_105x105-active.png +0 -0
- data/app/assets/images/knitkit/splash/images/browse_db_105x105.png +0 -0
- data/app/assets/images/knitkit/splash/images/console_105x105-active.png +0 -0
- data/app/assets/images/knitkit/splash/images/console_105x105.png +0 -0
- data/{public → app/assets}/images/knitkit/splash/images/find-themes.png +0 -0
- data/app/assets/images/knitkit/splash/images/find_themes_105x105-active.png +0 -0
- data/app/assets/images/knitkit/splash/images/find_themes_105x105.png +0 -0
- data/app/assets/images/knitkit/splash/images/learn_more_105x105-active.png +0 -0
- data/app/assets/images/knitkit/splash/images/learn_more_105x105.png +0 -0
- data/{public → app/assets}/images/knitkit/splash/images/settings.png +0 -0
- data/{public → app/assets}/images/knitkit/splash/images/tutorials.png +0 -0
- data/app/assets/images/knitkit/splash/splash.png +0 -0
- data/app/assets/images/widgets/manage_profile/contact_information.png +0 -0
- data/app/assets/images/widgets/manage_profile/password.png +0 -0
- data/app/assets/images/widgets/manage_profile/user_information.png +0 -0
- data/app/assets/javascripts/erp_app/desktop/applications/knitkit/app.js +24 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/articles_grid_panel.js +15 -12
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/center_region.js +69 -48
- data/app/assets/javascripts/erp_app/desktop/applications/knitkit/comments_grid_panel.js +214 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/east_region/east_region.js +0 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/east_region/file_assets_panel.js +17 -19
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/east_region/image_assets_data_view.js +13 -3
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/east_region/image_assets_panel.js +59 -48
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/east_region/widgets_panel.js +0 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/inquiries_grid_panel.js +2 -2
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/module.js +2 -2
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/publish_window.js +0 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/published_grid_panel.js +1 -1
- data/app/assets/javascripts/erp_app/desktop/applications/knitkit/splash_screen.js +268 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/top_menu/main_menu.js +85 -33
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/top_menu/websites_combo.js +0 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/versions_grid_panel.js +5 -28
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/article.js +22 -8
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/document.js +143 -25
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/host.js +5 -1
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/menu.js +2 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/section.js +181 -65
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/website_nav_items.js +0 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/hosts_tree_panel.js +0 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/menu_tree_panel.js +0 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/site_contents_tree_panel.js +121 -116
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/themes_tree_panel.js +101 -10
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/west_region.js +9 -5
- data/app/assets/javascripts/knitkit-web.js +22 -0
- data/app/assets/javascripts/knitkit/additional-methods.min.js +4 -0
- data/app/assets/javascripts/knitkit/bootstrap.min.js +7 -0
- data/app/assets/javascripts/knitkit/captcha.js +154 -0
- data/{public → app/assets}/javascripts/knitkit/confirm-bootstrap.js +1 -1
- data/{public → app/assets}/javascripts/knitkit/inline_editing.js +1 -1
- data/{public → app/assets}/javascripts/knitkit/jquery.maskedinput.min.js +0 -0
- data/app/assets/javascripts/knitkit/jquery.validate.min.js +4 -0
- data/app/assets/javascripts/knitkit/js.cookie.js +145 -0
- data/{public → app/assets}/javascripts/knitkit/theme.js +0 -0
- data/app/assets/stylesheets/erp_app/desktop/applications/knitkit/app.css +12 -0
- data/{public → app/assets}/stylesheets/erp_app/desktop/applications/knitkit/knitkit.css +23 -33
- data/app/assets/stylesheets/erp_app/shared/knitkit_shared.css +21 -0
- data/app/assets/stylesheets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/app/assets/stylesheets/fonts/glyphicons-halflings-regular.svg +288 -0
- data/app/assets/stylesheets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/app/assets/stylesheets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/app/assets/stylesheets/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/app/assets/stylesheets/knitkit-web.css +16 -0
- data/app/assets/stylesheets/knitkit/bootstrap.min.css +5 -0
- data/app/assets/stylesheets/knitkit/captcha.css +59 -0
- data/app/assets/stylesheets/knitkit/custom.css +144 -0
- data/{public → app/assets}/stylesheets/knitkit/inline_editing.css +0 -0
- data/app/assets/stylesheets/knitkit/submenu.css +93 -0
- data/app/controllers/api/v1/websites_controller.rb +14 -0
- data/app/controllers/captcha_controller.rb +53 -0
- data/app/controllers/knitkit/base_controller.rb +1 -5
- data/app/controllers/knitkit/erp_app/desktop/app_controller.rb +2 -9
- data/app/controllers/knitkit/erp_app/desktop/articles_controller.rb +20 -7
- data/app/controllers/knitkit/erp_app/desktop/file_assets_controller.rb +38 -28
- data/app/controllers/knitkit/erp_app/desktop/image_assets_controller.rb +16 -9
- data/app/controllers/knitkit/erp_app/desktop/online_document_sections_controller.rb +69 -15
- data/app/controllers/knitkit/erp_app/desktop/position_controller.rb +45 -58
- data/app/controllers/knitkit/erp_app/desktop/theme_controller.rb +64 -29
- data/app/controllers/knitkit/erp_app/desktop/website_controller.rb +36 -13
- data/app/controllers/knitkit/erp_app/desktop/website_host_controller.rb +12 -0
- data/app/controllers/knitkit/erp_app/desktop/website_nav_controller.rb +4 -11
- data/app/controllers/knitkit/erp_app/desktop/website_nav_item_controller.rb +2 -9
- data/app/controllers/knitkit/erp_app/desktop/website_section_controller.rb +56 -20
- data/app/controllers/knitkit/online_document_sections_controller.rb +9 -3
- data/app/mailers/website_inquiry_mailer.rb +11 -3
- data/app/models/content.rb +16 -6
- data/app/models/documented_item.rb +12 -1
- data/app/models/online_document_section.rb +54 -20
- data/app/models/published_website.rb +16 -0
- data/app/models/theme.rb +53 -47
- data/app/models/website.rb +172 -191
- data/app/models/website_section.rb +64 -30
- data/app/views/knitkit/blogs/show.html.erb +5 -2
- data/app/views/layouts/knitkit/base.html.erb +54 -51
- data/app/views/menus/knitkit/_default_menu.html.erb +11 -11
- data/app/views/menus/knitkit/_default_section_menu.html.erb +2 -2
- data/app/views/menus/knitkit/_default_sub_menu.erb +27 -0
- data/app/views/menus/knitkit/_default_sub_section_menu.html.erb +30 -0
- data/app/views/website_inquiry_mailer/inquiry.html.erb +266 -0
- data/app/widgets/contact_us/base.rb +26 -16
- data/app/widgets/contact_us/javascript/contact_us.js +1 -1
- data/app/widgets/contact_us/views/error.html.erb +7 -3
- data/app/widgets/contact_us/views/index.html.erb +36 -28
- data/app/widgets/google_map/javascript/google_map.js +1 -1
- data/app/widgets/google_map/views/index.html.erb +1 -1
- data/app/widgets/login/javascript/login.js +1 -1
- data/app/widgets/login/views/index.html.erb +1 -1
- data/app/widgets/manage_profile/base.rb +141 -112
- data/app/widgets/manage_profile/javascript/manage_profile.js +2 -2
- data/app/widgets/manage_profile/views/_password_form.html.erb +1 -1
- data/app/widgets/manage_profile/views/_user_information_form.html.erb +1 -30
- data/app/widgets/manage_profile/views/index.html.erb +42 -40
- data/app/widgets/reset_password/base.rb +39 -8
- data/app/widgets/reset_password/javascript/reset_password.js +1 -1
- data/app/widgets/reset_password/views/index.html.erb +3 -3
- data/app/widgets/reset_password/views/invalid_reset_token.html.erb +7 -0
- data/app/widgets/reset_password/views/layouts/base.html.erb +1 -1
- data/app/widgets/reset_password/views/reset_password.html.erb +39 -0
- data/app/widgets/reset_password/views/reset_success.html.erb +5 -0
- data/app/widgets/search/base.rb +5 -5
- data/app/widgets/search/javascript/search.js +6 -6
- data/app/widgets/search/views/_inline_search_form.html.erb +23 -12
- data/app/widgets/search/views/_search_form.html.erb +34 -30
- data/app/widgets/search/views/layouts/base.html.erb +6 -1
- data/app/widgets/signup/base.rb +73 -30
- data/app/widgets/signup/javascript/signup.js +1 -1
- data/app/widgets/signup/views/_signup_form.html.erb +2 -1
- data/app/widgets/signup/views/layouts/base.html.erb +1 -1
- data/app/widgets/signup/views/success.html.erb +2 -3
- data/config/routes.rb +25 -4
- data/db/data_migrations/20110509223702_add_publisher_role.rb +0 -2
- data/db/data_migrations/20110816153456_add_knitkit_application.rb +7 -15
- data/db/data_migrations/20120127150505_create_website_default_configuration.rb +63 -3
- data/db/data_migrations/20150118180450_add_website_member_roles.rb +12 -0
- data/db/data_migrations/20150414150359_nest_knitkit_security_roles.rb +35 -0
- data/db/data_migrations/20150414173437_move_website_roles_under_website_builder.rb +19 -0
- data/db/migrate/20110211002317_setup_knitkit.rb +86 -39
- data/lib/knitkit.rb +8 -2
- data/lib/knitkit/config.rb +2 -3
- data/lib/knitkit/engine.rb +35 -4
- data/lib/knitkit/extensions.rb +2 -1
- data/lib/knitkit/extensions/action_controller/theme_support/acts_as_themed_controller.rb +1 -1
- data/lib/knitkit/extensions/action_mailer/theme_support/acts_as_themed_mailer.rb +1 -1
- data/lib/knitkit/extensions/compass_ae/mailers/user_mailer.rb +31 -0
- data/lib/knitkit/extensions/compass_ae/widgets/base.rb +1 -1
- data/lib/knitkit/extensions/railties/action_controller/captcha_helper.rb +43 -0
- data/lib/knitkit/extensions/railties/action_view/helpers/content_helper.rb +1 -1
- data/lib/knitkit/extensions/railties/action_view/helpers/menu_helper.rb +11 -1
- data/lib/knitkit/extensions/railties/theme_support/asset_tag_helper.rb +83 -0
- data/lib/knitkit/routing_filter/section_router.rb +24 -14
- data/lib/knitkit/version.rb +1 -1
- data/lib/tasks/knitkit_tasks.rake +89 -4
- data/lib/tasks/theme_parser.rake +85 -0
- data/public/fonts/glyphicons-halflings-regular.eot +0 -0
- data/public/fonts/glyphicons-halflings-regular.svg +288 -0
- data/public/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/public/fonts/glyphicons-halflings-regular.woff +0 -0
- data/public/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/public/paypal-button.min.js +7 -0
- metadata +161 -82
- data/app/assets/javascripts/knitkit/application.js +0 -9
- data/app/assets/stylesheets/knitkit/application.css +0 -7
- data/app/mailers/document_mailer.rb +0 -10
- data/app/views/document_mailer/email_document.html.erb +0 -12
- data/app/views/knitkit/mobile/index.html.erb +0 -162
- data/app/views/knitkit/online_document_sections/index.html.erb +0 -279
- data/app/views/layouts/knitkit/online_document_sections.html.erb +0 -80
- data/app/views/website_inquiry_mailer/inquiry.erb +0 -24
- data/db/data_migrations/20120127150506_add_primary_host_to_website_configuration.rb +0 -33
- data/db/data_migrations/20120316150424_add_is_template_to_default_website_config.rb +0 -16
- data/db/data_migrations/20120809020508_update_website_and_configuration.rb +0 -82
- data/db/data_migrations/20121129185611_upgrade_website_role_iid.rb +0 -20
- data/db/migrate/20130405184234_add_use_markdown_to_section.rb +0 -19
- data/db/migrate/20131112013052_add_knitkit_missing_indexes.rb +0 -33
- data/db/migrate/20140622212723_update_website_inquiries.rb +0 -22
- data/db/migrate/20140911185022_add_publishing_to_website.rb +0 -5
- data/db/migrate/20141013073349_add_custom_fields_to_documents.rb +0 -12
- data/db/migrate/20141016101936_upgrade_remove_dynamic_attributes.rb +0 -13
- data/lib/knitkit/extensions/railties/theme_support/theme_file_resolver.rb +0 -49
- data/public/images/knitkit/close_window.png +0 -0
- data/public/images/knitkit/splash/splash.png +0 -0
- data/public/javascripts/erp_app/desktop/applications/knitkit/comments_grid_panel.js +0 -215
- data/public/javascripts/erp_app/desktop/applications/knitkit/select_roles_window.js +0 -108
- data/public/javascripts/erp_app/desktop/applications/knitkit/splash_screen.js +0 -170
- data/public/javascripts/knitkit/bootstrap-datepicker.js +0 -474
- data/public/javascripts/knitkit/bootstrap.min.js +0 -7
- data/public/javascripts/knitkit/mobile/app/view/Main.js +0 -108
- data/public/javascripts/knitkit/mobile/ux/slidenavigation/View.js +0 -734
- data/public/stylesheets/knitkit/bootstrap-responsive.min.css +0 -10
- data/public/stylesheets/knitkit/bootstrap.min.css +0 -7
- data/public/stylesheets/knitkit/custom.css +0 -122
- data/public/stylesheets/knitkit/datepicker.css +0 -182
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# create_table :published_websites do |t|
|
|
2
|
+
# t.references :website
|
|
3
|
+
# t.text :comment
|
|
4
|
+
# t.decimal :version, :precision => 18, :scale => 6
|
|
5
|
+
# t.boolean :active
|
|
6
|
+
# t.integer :published_by_id
|
|
7
|
+
#
|
|
8
|
+
# t.timestamps
|
|
9
|
+
# end
|
|
10
|
+
#
|
|
11
|
+
# #indexes
|
|
12
|
+
# add_index :published_websites, :website_id
|
|
13
|
+
# add_index :published_websites, :version
|
|
14
|
+
# add_index :published_websites, :active
|
|
15
|
+
# add_index :published_websites, :published_by_id
|
|
16
|
+
|
|
1
17
|
class PublishedWebsite < ActiveRecord::Base
|
|
2
18
|
attr_protected :created_at, :updated_at
|
|
3
19
|
|
data/app/models/theme.rb
CHANGED
|
@@ -4,15 +4,17 @@ require 'fileutils'
|
|
|
4
4
|
class Theme < ActiveRecord::Base
|
|
5
5
|
attr_protected :created_at, :updated_at
|
|
6
6
|
|
|
7
|
-
THEME_STRUCTURE = ['stylesheets', 'javascripts', 'images', 'templates']
|
|
7
|
+
THEME_STRUCTURE = ['stylesheets', 'javascripts', 'images', 'templates', 'fonts']
|
|
8
8
|
class << self
|
|
9
9
|
attr_accessor :base_layouts_views_path, :knitkit_website_stylesheets_path,
|
|
10
|
-
:knitkit_website_images_path, :knitkit_website_javascripts_path
|
|
10
|
+
:knitkit_website_images_path, :knitkit_website_javascripts_path,
|
|
11
|
+
:knitkit_website_fonts_path
|
|
11
12
|
end
|
|
12
13
|
@base_layouts_views_path = "#{Knitkit::Engine.root.to_s}/app/views"
|
|
13
|
-
@knitkit_website_stylesheets_path = "#{Knitkit::Engine.root.to_s}/
|
|
14
|
-
@knitkit_website_javascripts_path = "#{Knitkit::Engine.root.to_s}/
|
|
14
|
+
@knitkit_website_stylesheets_path = "#{Knitkit::Engine.root.to_s}/app/assets/stylesheets/knitkit"
|
|
15
|
+
@knitkit_website_javascripts_path = "#{Knitkit::Engine.root.to_s}/app/assets/javascripts/knitkit"
|
|
15
16
|
@knitkit_website_images_path = "#{Knitkit::Engine.root.to_s}/public/images/knitkit"
|
|
17
|
+
@knitkit_website_fonts_path = "#{Knitkit::Engine.root.to_s}/app/assets/fonts/knitkit"
|
|
16
18
|
|
|
17
19
|
protected_with_capabilities
|
|
18
20
|
has_file_assets
|
|
@@ -39,12 +41,12 @@ class Theme < ActiveRecord::Base
|
|
|
39
41
|
data = ''
|
|
40
42
|
entry.get_input_stream { |io| data = io.read }
|
|
41
43
|
data = StringIO.new(data) if data.present?
|
|
42
|
-
theme_file = self.files.where("name = ? and directory = ?", File.basename(name), File.join(self.url,File.dirname(name))).first
|
|
44
|
+
theme_file = self.files.where("name = ? and directory = ?", File.basename(name), File.join(self.url, File.dirname(name))).first
|
|
43
45
|
unless theme_file.nil?
|
|
44
46
|
theme_file.data = data
|
|
45
47
|
theme_file.save
|
|
46
48
|
else
|
|
47
|
-
self.add_file(data, File.join(file_support.root, self.url,name)) rescue next
|
|
49
|
+
self.add_file(data, File.join(file_support.root, self.url, name)) rescue next
|
|
48
50
|
end
|
|
49
51
|
end
|
|
50
52
|
end
|
|
@@ -54,12 +56,12 @@ class Theme < ActiveRecord::Base
|
|
|
54
56
|
|
|
55
57
|
class << self
|
|
56
58
|
def import_download_item(tempfile, website)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
name_and_id = tempfile.gsub(/(^.*(\\|\/))|(\.zip$)/, '')
|
|
60
|
+
theme_name = name_and_id.split('[').first
|
|
61
|
+
theme_id = name_and_id.split('[').last.gsub(']', '')
|
|
62
|
+
Theme.create(:name => theme_name.sub(/-theme/, ''), :theme_id => theme_id, :website_id => website.id).tap do |theme|
|
|
63
|
+
theme.import_download_item_file(tempfile)
|
|
64
|
+
end
|
|
63
65
|
end
|
|
64
66
|
|
|
65
67
|
|
|
@@ -77,7 +79,6 @@ class Theme < ActiveRecord::Base
|
|
|
77
79
|
end
|
|
78
80
|
|
|
79
81
|
|
|
80
|
-
|
|
81
82
|
def root_dir
|
|
82
83
|
@@root_dir ||= "#{Rails.root}/public"
|
|
83
84
|
end
|
|
@@ -89,11 +90,13 @@ class Theme < ActiveRecord::Base
|
|
|
89
90
|
def import(file, website)
|
|
90
91
|
name_and_id = file.original_filename.to_s.gsub(/(^.*(\\|\/))|(\.zip$)/, '')
|
|
91
92
|
theme_name = name_and_id.split('[').first
|
|
92
|
-
theme_id = name_and_id.split('[').last.gsub(']','')
|
|
93
|
+
theme_id = name_and_id.split('[').last.gsub(']', '')
|
|
93
94
|
return false unless valid_theme?(file)
|
|
94
|
-
Theme.create(:name => theme_name, :theme_id => theme_id, :website => website).tap do |theme|
|
|
95
|
+
theme = Theme.create(:name => theme_name, :theme_id => theme_id, :website => website).tap do |theme|
|
|
95
96
|
theme.import(file)
|
|
96
97
|
end
|
|
98
|
+
|
|
99
|
+
theme
|
|
97
100
|
end
|
|
98
101
|
|
|
99
102
|
def make_tmp_dir
|
|
@@ -119,6 +122,7 @@ class Theme < ActiveRecord::Base
|
|
|
119
122
|
|
|
120
123
|
extend FriendlyId
|
|
121
124
|
friendly_id :name, :use => [:slugged, :scoped], :slug_column => :theme_id, :scope => [:website_id]
|
|
125
|
+
|
|
122
126
|
def should_generate_new_friendly_id?
|
|
123
127
|
new_record?
|
|
124
128
|
end
|
|
@@ -147,18 +151,18 @@ class Theme < ActiveRecord::Base
|
|
|
147
151
|
def themed_widgets
|
|
148
152
|
Rails.application.config.erp_app.widgets.select do |widget_hash|
|
|
149
153
|
!(self.files.where("directory like '#{File.join(self.url, 'widgets', widget_hash[:name])}%'").all.empty?)
|
|
150
|
-
end.collect{|item| item[:name]}
|
|
154
|
+
end.collect { |item| item[:name] }
|
|
151
155
|
end
|
|
152
156
|
|
|
153
157
|
def non_themed_widgets
|
|
154
158
|
already_themed_widgets = self.themed_widgets
|
|
155
159
|
Rails.application.config.erp_app.widgets.select do |widget_hash|
|
|
156
160
|
!already_themed_widgets.include?(widget_hash[:name])
|
|
157
|
-
end.collect{|item| item[:name]}
|
|
161
|
+
end.collect { |item| item[:name] }
|
|
158
162
|
end
|
|
159
163
|
|
|
160
164
|
def create_layouts_for_widget(widget)
|
|
161
|
-
widget_hash = Rails.application.config.erp_app.widgets.find{|item| item[:name] == widget}
|
|
165
|
+
widget_hash = Rails.application.config.erp_app.widgets.find { |item| item[:name] == widget }
|
|
162
166
|
widget_hash[:view_files].each do |view_file|
|
|
163
167
|
save_theme_file(view_file[:path], :widgets, {:path_to_replace => view_file[:path].split('/views')[0], :widget_name => widget})
|
|
164
168
|
end
|
|
@@ -193,17 +197,19 @@ class Theme < ActiveRecord::Base
|
|
|
193
197
|
self.homepage = about['homepage'] if about['homepage']
|
|
194
198
|
self.summary = about['summary'] if about['summary']
|
|
195
199
|
else
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
theme_file.
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
200
|
+
if entry.file?
|
|
201
|
+
name = entry.name.sub(/__MACOSX\//, '')
|
|
202
|
+
name = Theme.strip_path(name, theme_root)
|
|
203
|
+
data = ''
|
|
204
|
+
entry.get_input_stream { |io| data = io.read }
|
|
205
|
+
data = StringIO.new(data) if data.present?
|
|
206
|
+
theme_file = self.files.where("name = ? and directory = ?", File.basename(name), File.join(self.url, File.dirname(name))).first
|
|
207
|
+
unless theme_file.nil?
|
|
208
|
+
theme_file.data = data
|
|
209
|
+
theme_file.save
|
|
210
|
+
else
|
|
211
|
+
self.add_file(data, File.join(file_support.root, self.url, name)) rescue next
|
|
212
|
+
end
|
|
207
213
|
end
|
|
208
214
|
end
|
|
209
215
|
end
|
|
@@ -217,13 +223,13 @@ class Theme < ActiveRecord::Base
|
|
|
217
223
|
(tmp_dir + "#{name}[#{theme_id}].zip").tap do |file_name|
|
|
218
224
|
file_name.unlink if file_name.exist?
|
|
219
225
|
Zip::ZipFile.open(file_name.to_s, Zip::ZipFile::CREATE) do |zip|
|
|
220
|
-
files.each {|file|
|
|
221
|
-
contents = file_support.get_contents(File.join(file_support.root,file.directory,file.name))
|
|
222
|
-
relative_path = file.directory.sub("#{url}",'')
|
|
223
|
-
path = FileUtils.mkdir_p(File.join(tmp_dir,relative_path))
|
|
224
|
-
full_path = File.join(path,file.name)
|
|
225
|
-
File.open(full_path, 'wb+') {|f| f.puts(contents) }
|
|
226
|
-
zip.add(File.join(relative_path[1..relative_path.length],file.name), full_path) if ::File.exists?(full_path)
|
|
226
|
+
files.each { |file|
|
|
227
|
+
contents = file_support.get_contents(File.join(file_support.root, file.directory, file.name))
|
|
228
|
+
relative_path = file.directory.sub("#{url}", '')
|
|
229
|
+
path = FileUtils.mkdir_p(File.join(tmp_dir, relative_path))
|
|
230
|
+
full_path = File.join(path, file.name)
|
|
231
|
+
File.open(full_path, 'wb+') { |f| f.puts(contents) }
|
|
232
|
+
zip.add(File.join(relative_path[1..relative_path.length], file.name), full_path) if ::File.exists?(full_path)
|
|
227
233
|
}
|
|
228
234
|
::File.open(tmp_dir + 'about.yml', 'wb+') { |f| f.puts(about.to_yaml) }
|
|
229
235
|
zip.add('about.yml', tmp_dir + 'about.yml')
|
|
@@ -232,7 +238,7 @@ class Theme < ActiveRecord::Base
|
|
|
232
238
|
end
|
|
233
239
|
|
|
234
240
|
def has_template?(directory, name)
|
|
235
|
-
self.templates.find{|item| item.directory == File.join(path,directory).gsub(Rails.root.to_s, '') and item.name == name}
|
|
241
|
+
self.templates.find { |item| item.directory == File.join(path, directory).gsub(Rails.root.to_s, '') and item.name == name }
|
|
236
242
|
end
|
|
237
243
|
|
|
238
244
|
class << self
|
|
@@ -269,7 +275,7 @@ class Theme < ActiveRecord::Base
|
|
|
269
275
|
|
|
270
276
|
def delete_theme_files!
|
|
271
277
|
file_support = ErpTechSvcs::FileSupport::Base.new(:storage => ErpTechSvcs::Config.file_storage)
|
|
272
|
-
file_support.delete_file(File.join(file_support.root,self.url), :force => true)
|
|
278
|
+
file_support.delete_file(File.join(file_support.root, self.url), :force => true)
|
|
273
279
|
end
|
|
274
280
|
|
|
275
281
|
def create_theme_files!
|
|
@@ -278,40 +284,40 @@ class Theme < ActiveRecord::Base
|
|
|
278
284
|
create_theme_files_for_directory_node(file_support.build_tree(Theme.knitkit_website_stylesheets_path, :preload => true), :stylesheets, :path_to_replace => Theme.knitkit_website_stylesheets_path)
|
|
279
285
|
create_theme_files_for_directory_node(file_support.build_tree(Theme.knitkit_website_javascripts_path, :preload => true), :javascripts, :path_to_replace => Theme.knitkit_website_javascripts_path)
|
|
280
286
|
create_theme_files_for_directory_node(file_support.build_tree(Theme.knitkit_website_images_path, :preload => true), :images, :path_to_replace => Theme.knitkit_website_images_path)
|
|
287
|
+
create_theme_files_for_directory_node(file_support.build_tree(Theme.knitkit_website_fonts_path, :preload => true), :fonts, :path_to_replace => Theme.knitkit_website_fonts_path)
|
|
281
288
|
end
|
|
282
289
|
|
|
283
290
|
private
|
|
284
291
|
|
|
285
292
|
def create_theme_files_for_directory_node(node, type, options={})
|
|
286
|
-
node
|
|
287
|
-
|
|
293
|
+
if node
|
|
294
|
+
node[:children].each do |child_node|
|
|
295
|
+
child_node[:leaf] ? save_theme_file(child_node[:id], type, options) : create_theme_files_for_directory_node(child_node, type, options)
|
|
296
|
+
end
|
|
288
297
|
end
|
|
289
298
|
end
|
|
290
299
|
|
|
291
300
|
def save_theme_file(path, type, options)
|
|
292
301
|
ignored_css = [
|
|
293
302
|
'bootstrap.min.css',
|
|
294
|
-
'bootstrap-responsive.min.css',
|
|
295
|
-
'datepicker.css',
|
|
296
303
|
'inline_editing.css',
|
|
297
304
|
]
|
|
298
305
|
|
|
299
306
|
ignored_js = [
|
|
307
|
+
'additional-methods.min',
|
|
300
308
|
'bootstrap.min.js',
|
|
301
|
-
'bootstrap-datepicker.js',
|
|
302
309
|
'confirm-bootstrap.js',
|
|
303
310
|
'inline_editing.js',
|
|
304
311
|
'jquery.maskedinput.min.js',
|
|
305
|
-
'
|
|
306
|
-
'View.js'
|
|
312
|
+
'jquery.validate.min.js'
|
|
307
313
|
]
|
|
308
314
|
|
|
309
315
|
ignored_files = (ignored_css | ignored_js).flatten
|
|
310
316
|
|
|
311
317
|
unless ignored_files.any? { |w| path =~ /#{w}/ }
|
|
312
318
|
contents = IO.read(path)
|
|
313
|
-
contents.gsub!("<%=
|
|
314
|
-
contents.gsub!("<%=
|
|
319
|
+
contents.gsub!("<%= stylesheet_link_tag 'knitkit/custom' %>", "<%= theme_stylesheet_link_tag '#{self.theme_id}','custom.css' %>") unless path.scan('base.html.erb').empty?
|
|
320
|
+
contents.gsub!("<%= javascript_include_tag 'knitkit/theme' %>", "<%= theme_javascript_include_tag '#{self.theme_id}','theme.js' %>") unless path.scan('base.html.erb').empty?
|
|
315
321
|
|
|
316
322
|
path = case type
|
|
317
323
|
when :widgets
|
data/app/models/website.rb
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
|
+
# create_table :websites do |t|
|
|
2
|
+
# t.string :name
|
|
3
|
+
# t.string :title
|
|
4
|
+
# t.string :subtitle
|
|
5
|
+
# t.string :internal_identifier
|
|
6
|
+
# t.boolean :publishing, :default => false
|
|
7
|
+
#
|
|
8
|
+
# t.timestamps
|
|
9
|
+
# end
|
|
10
|
+
#
|
|
11
|
+
# add_index :websites, :internal_identifier, :name => 'websites_internal_identifier_idx'
|
|
12
|
+
|
|
1
13
|
class Website < ActiveRecord::Base
|
|
2
14
|
attr_protected :created_at, :updated_at
|
|
3
15
|
|
|
4
16
|
after_destroy :remove_sites_directory, :remove_website_role
|
|
5
|
-
before_destroy :destroy_sections
|
|
17
|
+
before_destroy :destroy_sections, :destroy_website_security_role, :destroy_website_party_roles
|
|
6
18
|
after_create :setup_website
|
|
7
19
|
|
|
8
20
|
protected_with_capabilities
|
|
@@ -67,6 +79,18 @@ class Website < ActiveRecord::Base
|
|
|
67
79
|
parents.each { |parent| parent.destroy }
|
|
68
80
|
end
|
|
69
81
|
|
|
82
|
+
def destroy_website_security_role
|
|
83
|
+
ActiveRecord::Base.connection.execute("delete from parties_security_roles where security_role_id = #{self.role.id}")
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def destroy_website_party_roles
|
|
87
|
+
ActiveRecord::Base.connection.execute("delete from website_party_roles where website_id = #{self.id}")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def dba_organization
|
|
91
|
+
self.website_party_roles.where(role_type_id: RoleType.iid('dba_org')).first.party
|
|
92
|
+
end
|
|
93
|
+
|
|
70
94
|
def publishing?
|
|
71
95
|
self.publishing
|
|
72
96
|
end
|
|
@@ -98,15 +122,6 @@ class Website < ActiveRecord::Base
|
|
|
98
122
|
config_value('email_inquiries') == 'yes'
|
|
99
123
|
end
|
|
100
124
|
|
|
101
|
-
def self.find_by_host(host)
|
|
102
|
-
website = nil
|
|
103
|
-
unless host.nil?
|
|
104
|
-
website_host = WebsiteHost.find_by_host(host)
|
|
105
|
-
website = website_host.website unless website_host.nil?
|
|
106
|
-
end
|
|
107
|
-
website
|
|
108
|
-
end
|
|
109
|
-
|
|
110
125
|
def deactivate_themes!
|
|
111
126
|
themes.each do |theme|
|
|
112
127
|
theme.deactivate!
|
|
@@ -153,7 +168,12 @@ class Website < ActiveRecord::Base
|
|
|
153
168
|
|
|
154
169
|
def setup_website
|
|
155
170
|
PublishedWebsite.create(:website => self, :version => 0, :active => true, :comment => 'New Site Created')
|
|
156
|
-
|
|
171
|
+
|
|
172
|
+
if self.role.nil?
|
|
173
|
+
website_role = SecurityRole.create(:description => "Website #{self.title}", :internal_identifier => website_role_iid)
|
|
174
|
+
website_role.move_to_child_of(SecurityRole.iid('website_builder'))
|
|
175
|
+
end
|
|
176
|
+
|
|
157
177
|
configuration = ::Configuration.find_template('default_website_configuration').clone(true, "Website #{self.title} Configuration", "Website #{self.title} Configuration".underscore)
|
|
158
178
|
configuration.update_configuration_item(ConfigurationItemType.find_by_internal_identifier('login_url'), '/login')
|
|
159
179
|
configuration.update_configuration_item(ConfigurationItemType.find_by_internal_identifier('homepage_url'), '/home')
|
|
@@ -187,9 +207,18 @@ class Website < ActiveRecord::Base
|
|
|
187
207
|
profile_page = nil
|
|
188
208
|
widget_classes.each do |widget_class|
|
|
189
209
|
website_section = WebsiteSection.new
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
210
|
+
|
|
211
|
+
# AE-194: Inline Search is active, so no need for search page, take search layout
|
|
212
|
+
# but change section name for the Search Results page
|
|
213
|
+
# and change layout so render widget to calls search action
|
|
214
|
+
website_section.in_menu = true unless ["Login", "Sign Up", "Reset Password", "Search"].include?(widget_class.title)
|
|
215
|
+
if widget_class.title == 'Search'
|
|
216
|
+
website_section.title = 'Search Results'
|
|
217
|
+
website_section.layout = widget_class.base_layout.gsub(":search", ":search, :action => 'search'")
|
|
218
|
+
else
|
|
219
|
+
website_section.title = widget_class.title
|
|
220
|
+
website_section.layout = widget_class.base_layout
|
|
221
|
+
end
|
|
193
222
|
website_section.save
|
|
194
223
|
|
|
195
224
|
profile_page = website_section if widget_class.title == 'Manage Profile'
|
|
@@ -211,7 +240,8 @@ class Website < ActiveRecord::Base
|
|
|
211
240
|
:sections => [],
|
|
212
241
|
:images => [],
|
|
213
242
|
:files => [],
|
|
214
|
-
:website_navs => []
|
|
243
|
+
:website_navs => [],
|
|
244
|
+
:members => []
|
|
215
245
|
}
|
|
216
246
|
|
|
217
247
|
#TODO update to handle configurations
|
|
@@ -235,6 +265,13 @@ class Website < ActiveRecord::Base
|
|
|
235
265
|
setup_hash[:files] << {:path => file_asset.directory, :name => file_asset.name, :roles => file_asset.roles.uniq.collect { |r| r.internal_identifier }}
|
|
236
266
|
end
|
|
237
267
|
|
|
268
|
+
# get all members of the website
|
|
269
|
+
self.website_party_roles.where('role_type_id = ?', RoleType.find_by_ancestor_iids(['website', 'member'])).each do |website_party_role|
|
|
270
|
+
party = website_party_role.party
|
|
271
|
+
|
|
272
|
+
setup_hash[:members] << party.user.username
|
|
273
|
+
end
|
|
274
|
+
|
|
238
275
|
setup_hash
|
|
239
276
|
end
|
|
240
277
|
|
|
@@ -329,9 +366,9 @@ class Website < ActiveRecord::Base
|
|
|
329
366
|
|
|
330
367
|
def export_template
|
|
331
368
|
tmp_dir = Website.make_tmp_dir
|
|
332
|
-
|
|
369
|
+
website_zip_path = export
|
|
333
370
|
|
|
334
|
-
|
|
371
|
+
unless themes.active.first.is_a?(Theme)
|
|
335
372
|
return false
|
|
336
373
|
end
|
|
337
374
|
|
|
@@ -340,36 +377,75 @@ class Website < ActiveRecord::Base
|
|
|
340
377
|
zip_file_name = File.join(tmp_dir, self.iid + '-composite.zip')
|
|
341
378
|
|
|
342
379
|
Zip::ZipFile.open(zip_file_name, Zip::ZipFile::CREATE) do |zip_file|
|
|
343
|
-
zip_file.add(File.basename(
|
|
380
|
+
zip_file.add(File.basename(website_zip_path, '.zip') + '-website.zip', website_zip_path)
|
|
344
381
|
zip_file.add(File.basename(theme_zip_path, '.zip') + '-theme.zip', theme_zip_path)
|
|
345
382
|
end
|
|
346
383
|
|
|
347
384
|
File.join(tmp_dir, self.iid + '-composite.zip')
|
|
348
385
|
end
|
|
349
386
|
|
|
387
|
+
def website_role_iid
|
|
388
|
+
"website_#{self.iid}_access"
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
def to_data_hash
|
|
392
|
+
to_hash(only: [:id, :name, :title, :subtitle,
|
|
393
|
+
:internal_identifier, :created_at, :updated_at])
|
|
394
|
+
end
|
|
395
|
+
|
|
350
396
|
class << self
|
|
397
|
+
|
|
398
|
+
# Scope websites by passed dba_organization(s)
|
|
399
|
+
#
|
|
400
|
+
# @param dba_organization [Party, Array] Either a single dba_organization to scope by
|
|
401
|
+
# or an array of dba_organizations to scope by
|
|
402
|
+
# @return [ActiveRecord::Relation] Websites scope by ba_organization(s)
|
|
403
|
+
def scope_by_dba_organization(dba_organization)
|
|
404
|
+
joins(website_party_roles: [:party, :role_type])
|
|
405
|
+
.where(role_types: {internal_identifier: 'dba_org'})
|
|
406
|
+
.where(parties: {id: dba_organization})
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
def find_by_host(host)
|
|
410
|
+
website = nil
|
|
411
|
+
unless host.nil?
|
|
412
|
+
website_host = WebsiteHost.find_by_host(host)
|
|
413
|
+
website = website_host.website unless website_host.nil?
|
|
414
|
+
end
|
|
415
|
+
website
|
|
416
|
+
end
|
|
417
|
+
|
|
351
418
|
def make_tmp_dir
|
|
352
419
|
Pathname.new(File.join(Rails.root, "/tmp/website_export/tmp_#{Time.now.to_i.to_s}")).tap do |dir|
|
|
353
420
|
FileUtils.mkdir_p(dir) unless dir.exist?
|
|
354
421
|
end
|
|
355
422
|
end
|
|
356
423
|
|
|
357
|
-
def import(
|
|
424
|
+
def import(file_path, current_user)
|
|
358
425
|
file_support = ErpTechSvcs::FileSupport::Base.new(:storage => Rails.application.config.erp_tech_svcs.file_storage)
|
|
359
426
|
message = ''
|
|
360
427
|
website = nil
|
|
361
428
|
|
|
362
|
-
file
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
429
|
+
# if the path to the file is passed just use it else get the path from
|
|
430
|
+
# the File object that was passed
|
|
431
|
+
unless file_path.is_a?(String)
|
|
432
|
+
if file_path.path
|
|
433
|
+
file_path = file_path.path
|
|
434
|
+
else
|
|
435
|
+
file = ActionController::UploadedTempfile.new("uploaded-website").tap do |f|
|
|
436
|
+
f.puts file_path.read
|
|
437
|
+
f.original_filename = file_path.original_filename
|
|
438
|
+
f.read # no idea why we need this here, otherwise the zip can't be opened
|
|
439
|
+
end
|
|
440
|
+
file_path = file.path
|
|
441
|
+
end
|
|
442
|
+
end
|
|
367
443
|
|
|
368
444
|
entries = []
|
|
369
445
|
setup_hash = nil
|
|
370
446
|
|
|
371
447
|
tmp_dir = Website.make_tmp_dir
|
|
372
|
-
Zip::ZipFile.open(
|
|
448
|
+
Zip::ZipFile.open(file_path) do |zip|
|
|
373
449
|
zip.each do |entry|
|
|
374
450
|
f_path = File.join(tmp_dir.to_s, entry.name)
|
|
375
451
|
FileUtils.mkdir_p(File.dirname(f_path))
|
|
@@ -417,13 +493,6 @@ class Website < ActiveRecord::Base
|
|
|
417
493
|
|
|
418
494
|
begin
|
|
419
495
|
#handle images
|
|
420
|
-
# entries.each do |entry|
|
|
421
|
-
# puts "entry type '#{entry[:type]}'"
|
|
422
|
-
# puts "entry name '#{entry[:name]}'"
|
|
423
|
-
# puts "entry path '#{entry[:path]}'"
|
|
424
|
-
# puts "entry data #{!entry[:data].blank?}"
|
|
425
|
-
# end
|
|
426
|
-
# puts "------------------"
|
|
427
496
|
setup_hash[:images].each do |image_asset|
|
|
428
497
|
filename = 'images' + image_asset[:path] + '/' + image_asset[:name]
|
|
429
498
|
#puts "image_asset '#{filename}'"
|
|
@@ -433,10 +502,29 @@ class Website < ActiveRecord::Base
|
|
|
433
502
|
end
|
|
434
503
|
end
|
|
435
504
|
|
|
505
|
+
if setup_hash[:members]
|
|
506
|
+
#handle members
|
|
507
|
+
website_role_type_parent = RoleType.find_or_create('website', 'Website')
|
|
508
|
+
website_member_role = RoleType.find_or_create('member', 'Member', website_role_type_parent)
|
|
509
|
+
|
|
510
|
+
setup_hash[:members].each do |member|
|
|
511
|
+
user = User.find_by_username(member)
|
|
512
|
+
|
|
513
|
+
if user
|
|
514
|
+
# add website security role to user
|
|
515
|
+
user.add_role(website.role)
|
|
516
|
+
|
|
517
|
+
# create website_party_role for this user as a member of the site
|
|
518
|
+
WebsitePartyRole.create(party: user.party, website: website, role_type: website_member_role)
|
|
519
|
+
|
|
520
|
+
user.save
|
|
521
|
+
end
|
|
522
|
+
end
|
|
523
|
+
end
|
|
524
|
+
|
|
436
525
|
#handle files
|
|
437
526
|
setup_hash[:files].each do |file_asset|
|
|
438
527
|
filename = 'files' + file_asset[:path] + '/' + file_asset[:name]
|
|
439
|
-
#puts "file_asset '#{filename}'"
|
|
440
528
|
content = entries.find { |entry| entry[:type] == 'files' and entry[:path] == filename }
|
|
441
529
|
unless content.nil?
|
|
442
530
|
file = website.add_file(content[:data], File.join(file_support.root, file_asset[:path], file_asset[:name]))
|
|
@@ -488,6 +576,11 @@ class Website < ActiveRecord::Base
|
|
|
488
576
|
end
|
|
489
577
|
|
|
490
578
|
website.save
|
|
579
|
+
|
|
580
|
+
# set the currents users dba_org as the dba_org for this website
|
|
581
|
+
WebsitePartyRole.create(website: website,
|
|
582
|
+
party: current_user.party.dba_organization,
|
|
583
|
+
role_type: RoleType.iid('dba_org'))
|
|
491
584
|
else
|
|
492
585
|
message = 'Website already exists with that internal_identifier'
|
|
493
586
|
end
|
|
@@ -495,177 +588,64 @@ class Website < ActiveRecord::Base
|
|
|
495
588
|
return website, message
|
|
496
589
|
end
|
|
497
590
|
|
|
498
|
-
def
|
|
499
|
-
|
|
500
|
-
|
|
591
|
+
def import_template(file, current_user)
|
|
592
|
+
file = ActionController::UploadedTempfile.new("uploaded-template").tap do |f|
|
|
593
|
+
f.puts file.read
|
|
594
|
+
f.original_filename = file.original_filename
|
|
595
|
+
f.read # no idea why we need this here, otherwise the zip can't be opened
|
|
596
|
+
end unless file.path
|
|
597
|
+
|
|
598
|
+
result = {website: nil, theme: nil, success: false}
|
|
501
599
|
|
|
502
600
|
entries = []
|
|
503
601
|
begin
|
|
504
|
-
Zip::ZipFile.open(
|
|
505
|
-
zip_file.each
|
|
506
|
-
f_path=File.join('
|
|
602
|
+
Zip::ZipFile.open(file.path) do |zip_file|
|
|
603
|
+
zip_file.each do |f|
|
|
604
|
+
f_path = File.join('tmp/template_import', f.name)
|
|
507
605
|
FileUtils.mkdir_p(File.dirname(f_path))
|
|
508
606
|
zip_file.extract(f, f_path) unless File.exist?(f_path)
|
|
509
|
-
entries << f.name
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
entries.each do |entry|
|
|
514
|
-
if entry.match(/-template.zip/)
|
|
515
|
-
@website_result = import_template('public/waste/' + entry, current_user)
|
|
607
|
+
entries << {name: f.name, path: f_path}
|
|
516
608
|
end
|
|
517
609
|
end
|
|
610
|
+
|
|
518
611
|
entries.each do |entry|
|
|
519
|
-
if entry.match(/-
|
|
520
|
-
|
|
612
|
+
if entry[:name].match(/-website.zip/)
|
|
613
|
+
result[:website], result[:message] = import(entry[:path], current_user)
|
|
521
614
|
end
|
|
522
615
|
end
|
|
523
|
-
return @website_result[0], @website_result[1]
|
|
524
|
-
rescue Exception => e
|
|
525
|
-
return false, "Error"
|
|
526
|
-
end
|
|
527
|
-
end
|
|
528
616
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
entries = []
|
|
535
|
-
setup_hash = nil
|
|
536
|
-
|
|
537
|
-
tmp_dir = Website.make_tmp_dir
|
|
538
|
-
|
|
539
|
-
Zip::ZipFile.open(file) do |zip|#passing in a file
|
|
540
|
-
#Zip::ZipFile.open(file.path) do |zip|
|
|
541
|
-
zip.each do |entry|
|
|
542
|
-
f_path = File.join(tmp_dir.to_s, entry.name)
|
|
543
|
-
FileUtils.mkdir_p(File.dirname(f_path))
|
|
544
|
-
zip.extract(entry, f_path) unless File.exist?(f_path)
|
|
545
|
-
|
|
546
|
-
next if entry.name =~ /__MACOSX\//
|
|
547
|
-
if entry.name =~ /setup.yml/
|
|
548
|
-
data = ''
|
|
549
|
-
entry.get_input_stream { |io| data = io.read }
|
|
550
|
-
data = StringIO.new(data) if data.present?
|
|
551
|
-
setup_hash = YAML.load(data)
|
|
552
|
-
else
|
|
553
|
-
type = entry.name.split('/')[0]
|
|
554
|
-
name = entry.name.split('/').last
|
|
555
|
-
next if name.nil?
|
|
556
|
-
|
|
557
|
-
if File.exist?(f_path) and !File.directory?(f_path)
|
|
558
|
-
entry_hash = {:type => type, :name => name, :path => entry.name}
|
|
559
|
-
entries << entry_hash unless name == 'sections' || name == 'articles' || name == 'excerpts' || name == 'documented contents'
|
|
560
|
-
entry_hash[:data] = File.open(f_path, "rb") { |io| io.read }
|
|
617
|
+
if result[:website]
|
|
618
|
+
entries.each do |entry|
|
|
619
|
+
if entry[:name].match(/-theme.zip/)
|
|
620
|
+
result[:theme] = Theme.import(entry[:path], result[:website], true)
|
|
561
621
|
end
|
|
562
622
|
end
|
|
563
|
-
|
|
623
|
+
else
|
|
624
|
+
raise result[:message]
|
|
564
625
|
end
|
|
565
|
-
end
|
|
566
|
-
entries.uniq!
|
|
567
|
-
FileUtils.rm_rf(tmp_dir.to_s)
|
|
568
626
|
|
|
569
|
-
|
|
570
|
-
website = Website.new(
|
|
571
|
-
:name => setup_hash[:name],
|
|
572
|
-
:title => setup_hash[:title],
|
|
573
|
-
:subtitle => setup_hash[:subtitle],
|
|
574
|
-
:internal_identifier => setup_hash[:internal_identifier]
|
|
575
|
-
)
|
|
576
|
-
|
|
577
|
-
#TODO update to handle configurations
|
|
578
|
-
|
|
579
|
-
website.save!
|
|
580
|
-
|
|
581
|
-
#set default publication published by user
|
|
582
|
-
first_publication = website.published_websites.first
|
|
583
|
-
first_publication.published_by = current_user
|
|
584
|
-
first_publication.save
|
|
585
|
-
|
|
586
|
-
begin
|
|
587
|
-
#handle images
|
|
588
|
-
# entries.each do |entry|
|
|
589
|
-
# puts "entry type '#{entry[:type]}'"
|
|
590
|
-
# puts "entry name '#{entry[:name]}'"
|
|
591
|
-
# puts "entry path '#{entry[:path]}'"
|
|
592
|
-
# puts "entry data #{!entry[:data].blank?}"
|
|
593
|
-
# end
|
|
594
|
-
# puts "------------------"
|
|
595
|
-
setup_hash[:images].each do |image_asset|
|
|
596
|
-
filename = 'images' + image_asset[:path] + '/' + image_asset[:name]
|
|
597
|
-
#puts "image_asset '#{filename}'"
|
|
598
|
-
content = entries.find { |entry| entry[:type] == 'images' and entry[:path] == filename }
|
|
599
|
-
unless content.nil?
|
|
600
|
-
website.add_file(content[:data], File.join(file_support.root, image_asset[:path], image_asset[:name]))
|
|
601
|
-
end
|
|
602
|
-
end
|
|
603
|
-
|
|
604
|
-
#handle files
|
|
605
|
-
setup_hash[:files].each do |file_asset|
|
|
606
|
-
filename = 'files' + file_asset[:path] + '/' + file_asset[:name]
|
|
607
|
-
#puts "file_asset '#{filename}'"
|
|
608
|
-
content = entries.find { |entry| entry[:type] == 'files' and entry[:path] == filename }
|
|
609
|
-
unless content.nil?
|
|
610
|
-
file = website.add_file(content[:data], File.join(file_support.root, file_asset[:path], file_asset[:name]))
|
|
611
|
-
|
|
612
|
-
#handle security
|
|
613
|
-
unless file_asset[:roles].empty?
|
|
614
|
-
capability = file.add_capability(:download)
|
|
615
|
-
file_asset[:roles].each do |role_iid|
|
|
616
|
-
role = SecurityRole.find_by_internal_identifier(role_iid)
|
|
617
|
-
role.add_capability(capability)
|
|
618
|
-
end
|
|
619
|
-
end
|
|
620
|
-
end
|
|
621
|
-
end
|
|
622
|
-
|
|
623
|
-
#handle hosts
|
|
624
|
-
if WebsiteHost.last
|
|
625
|
-
setup_hash.merge(:hosts => 'localhost:3000')
|
|
626
|
-
end
|
|
627
|
+
FileUtils.rm_rf('tmp/template_import')
|
|
627
628
|
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
end
|
|
633
|
-
|
|
634
|
-
#handle sections
|
|
635
|
-
setup_hash[:sections].each do |section_hash|
|
|
636
|
-
build_section(section_hash, entries, website, current_user)
|
|
637
|
-
end
|
|
638
|
-
website.website_sections.update_paths!
|
|
639
|
-
|
|
640
|
-
#handle website_navs
|
|
641
|
-
setup_hash[:website_navs].each do |website_nav_hash|
|
|
642
|
-
website_nav = WebsiteNav.new(:name => website_nav_hash[:name])
|
|
643
|
-
website_nav_hash[:items].each do |item|
|
|
644
|
-
website_nav.website_nav_items << build_menu_item(item)
|
|
645
|
-
end
|
|
646
|
-
website.website_navs << website_nav
|
|
647
|
-
end
|
|
648
|
-
|
|
649
|
-
website.publish("Website Imported", current_user)
|
|
629
|
+
result[:success] = true
|
|
630
|
+
rescue Exception => e
|
|
631
|
+
Rails.logger.error(e.message)
|
|
632
|
+
Rails.logger.error(e.backtrace.join("\n"))
|
|
650
633
|
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
website
|
|
654
|
-
raise ex
|
|
634
|
+
if result[:website]
|
|
635
|
+
result[:website].destroy
|
|
636
|
+
result[:website] = nil
|
|
655
637
|
end
|
|
656
638
|
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
message = 'Website already exists with that internal_identifier'
|
|
639
|
+
result[:message] = 'Error importing theme'
|
|
640
|
+
result[:success] = false
|
|
660
641
|
end
|
|
661
642
|
|
|
662
|
-
|
|
643
|
+
result
|
|
663
644
|
end
|
|
664
645
|
|
|
665
|
-
|
|
666
646
|
def find_site_entry_in_zip(file)
|
|
667
647
|
zf = Zip::ZipFile.open(file)
|
|
668
|
-
zf.each_with_index {
|
|
648
|
+
zf.each_with_index { |entry, index|
|
|
669
649
|
if entry.name.match(/-template.zip/) && !entry.name.match(/_./)
|
|
670
650
|
return entry
|
|
671
651
|
end
|
|
@@ -675,7 +655,7 @@ class Website < ActiveRecord::Base
|
|
|
675
655
|
def find_theme_entries_in_zip(file)
|
|
676
656
|
entries = []
|
|
677
657
|
zf = Zip::ZipFile.new(file)
|
|
678
|
-
zf.each_with_index {
|
|
658
|
+
zf.each_with_index { |entry, index|
|
|
679
659
|
if entry.name.match(/-theme.zip/) && !entry.name.match(/_./)
|
|
680
660
|
entries << entry
|
|
681
661
|
end
|
|
@@ -683,10 +663,8 @@ class Website < ActiveRecord::Base
|
|
|
683
663
|
entries
|
|
684
664
|
end
|
|
685
665
|
|
|
686
|
-
|
|
687
666
|
protected
|
|
688
667
|
|
|
689
|
-
|
|
690
668
|
def build_menu_item(hash)
|
|
691
669
|
website_item = WebsiteNavItem.new(
|
|
692
670
|
:title => hash[:title],
|
|
@@ -718,17 +696,20 @@ class Website < ActiveRecord::Base
|
|
|
718
696
|
klass = hash[:type].constantize
|
|
719
697
|
section = klass.new(:title => hash[:name],
|
|
720
698
|
:in_menu => hash[:in_menu],
|
|
721
|
-
:render_base_layout => hash[:render_base_layout],
|
|
722
699
|
:position => hash[:position],
|
|
723
700
|
:render_base_layout => hash[:render_base_layout])
|
|
724
701
|
section.internal_identifier = hash[:internal_identifier]
|
|
725
|
-
section.permalink = hash[:permalink]
|
|
726
|
-
section.path = hash[:path]
|
|
727
702
|
content = entries.find do |entry|
|
|
728
703
|
entry[:type] == 'sections' and entry[:name] == "#{hash[:permalink]}.rhtml" and entry[:path].split('.')[0] == "sections#{hash[:path]}"
|
|
729
704
|
end
|
|
730
705
|
|
|
731
706
|
section.layout = content[:data] unless content.nil?
|
|
707
|
+
section.save
|
|
708
|
+
|
|
709
|
+
# force the update of permalink and path
|
|
710
|
+
section.permalink = hash[:permalink]
|
|
711
|
+
section.path = hash[:path]
|
|
712
|
+
section.save
|
|
732
713
|
|
|
733
714
|
hash[:articles].each do |article_hash|
|
|
734
715
|
article = Article.find_by_internal_identifier(article_hash[:internal_identifier])
|
|
@@ -741,13 +722,17 @@ class Website < ActiveRecord::Base
|
|
|
741
722
|
unless content.nil?
|
|
742
723
|
article.excerpt_html = content[:data]
|
|
743
724
|
end
|
|
725
|
+
|
|
726
|
+
# set the currents users dba_org as the dba_org for this content
|
|
727
|
+
article.add_party_with_role(current_user.party.dba_organization,
|
|
728
|
+
RoleType.iid('dba_org'))
|
|
744
729
|
end
|
|
745
730
|
section.contents << article
|
|
746
|
-
section.save
|
|
747
731
|
article.update_content_area_and_position_by_section(section, article_hash[:content_area], article_hash[:position])
|
|
748
732
|
end
|
|
749
733
|
website.website_sections << section
|
|
750
|
-
|
|
734
|
+
website.save
|
|
735
|
+
|
|
751
736
|
if hash[:sections]
|
|
752
737
|
hash[:sections].each do |section_hash|
|
|
753
738
|
child_section = build_section(section_hash, entries, website, current_user)
|
|
@@ -793,10 +778,6 @@ class Website < ActiveRecord::Base
|
|
|
793
778
|
section
|
|
794
779
|
end
|
|
795
780
|
|
|
796
|
-
|
|
797
781
|
end
|
|
798
782
|
|
|
799
|
-
def website_role_iid
|
|
800
|
-
"website_#{self.iid}_access"
|
|
801
|
-
end
|
|
802
783
|
end
|