pageflow 12.0.4 → 12.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pageflow might be problematic. Click here for more details.

Files changed (217) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +158 -374
  3. data/README.md +24 -3
  4. data/Rakefile +2 -2
  5. data/admins/pageflow/accounts.rb +30 -4
  6. data/admins/pageflow/entry.rb +59 -9
  7. data/admins/pageflow/membership.rb +57 -6
  8. data/admins/pageflow/user.rb +25 -4
  9. data/app/assets/images/pageflow/themes/default/preview.png +0 -0
  10. data/app/assets/images/pageflow/themes/default/preview_thumbnail.png +0 -0
  11. data/app/assets/javascripts/pageflow/admin/entries.js +5 -3
  12. data/app/assets/javascripts/pageflow/admin/users.js +33 -0
  13. data/app/assets/javascripts/pageflow/admin.js +4 -1
  14. data/app/assets/javascripts/pageflow/audio_context.js +28 -0
  15. data/app/assets/javascripts/pageflow/audio_player/get_media_element_method.js +5 -0
  16. data/app/assets/javascripts/pageflow/audio_player.js +2 -0
  17. data/app/assets/javascripts/pageflow/base.js +4 -22
  18. data/app/assets/javascripts/pageflow/dist/react.js +323 -242
  19. data/app/assets/javascripts/pageflow/editor/api/widget_type.js +23 -0
  20. data/app/assets/javascripts/pageflow/editor/api/widget_types.js +53 -0
  21. data/app/assets/javascripts/pageflow/editor/api.js +9 -1
  22. data/app/assets/javascripts/pageflow/editor/base.js +0 -1
  23. data/app/assets/javascripts/pageflow/editor/collections/pages_collection.js +1 -0
  24. data/app/assets/javascripts/pageflow/editor/collections/subset_collection.js +21 -1
  25. data/app/assets/javascripts/pageflow/editor/collections/themes_collection.js +13 -0
  26. data/app/assets/javascripts/pageflow/editor/collections/widgets_collection.js +23 -8
  27. data/app/assets/javascripts/pageflow/editor/controllers/sidebar_controller.js +7 -1
  28. data/app/assets/javascripts/pageflow/editor/initializers/setup_collections.js +10 -3
  29. data/app/assets/javascripts/pageflow/editor/initializers/setup_widget_types.js +5 -1
  30. data/app/assets/javascripts/pageflow/editor/initializers/stylesheet_reloading.js +8 -3
  31. data/app/assets/javascripts/pageflow/editor/models/edit_lock_container.js +1 -1
  32. data/app/assets/javascripts/pageflow/editor/models/entry.js +7 -4
  33. data/app/assets/javascripts/pageflow/editor/models/entry_configuration.js +1 -1
  34. data/app/assets/javascripts/pageflow/editor/models/file_stage.js +1 -0
  35. data/app/assets/javascripts/pageflow/editor/models/page.js +3 -1
  36. data/app/assets/javascripts/pageflow/editor/models/preview_entry_data.js +2 -2
  37. data/app/assets/javascripts/pageflow/editor/models/theme.js +25 -0
  38. data/app/assets/javascripts/pageflow/editor/models/theming.js +1 -19
  39. data/app/assets/javascripts/pageflow/editor/models/widget.js +22 -1
  40. data/app/assets/javascripts/pageflow/editor/models/widget_configuration.js +5 -0
  41. data/app/assets/javascripts/pageflow/editor/routers/sidebar_router.js +1 -0
  42. data/app/assets/javascripts/pageflow/editor/templates/change_theme_dialog.jst.ejs +23 -0
  43. data/app/assets/javascripts/pageflow/editor/templates/edit_widget.jst.ejs +1 -2
  44. data/app/assets/javascripts/pageflow/editor/templates/inputs/reference.jst.ejs +2 -2
  45. data/app/assets/javascripts/pageflow/editor/templates/static_thumbnail.jst.ejs +1 -0
  46. data/app/assets/javascripts/pageflow/editor/templates/theme_item.jst.ejs +5 -0
  47. data/app/assets/javascripts/pageflow/editor/templates/widget_item.jst.ejs +3 -0
  48. data/app/assets/javascripts/pageflow/editor/utils/stylesheet.js +23 -0
  49. data/app/assets/javascripts/pageflow/editor/views/change_theme_dialog_view.js +76 -0
  50. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/groups/options.js +4 -2
  51. data/app/assets/javascripts/pageflow/editor/views/edit_meta_data_view.js +17 -4
  52. data/app/assets/javascripts/pageflow/editor/views/edit_widget_view.js +11 -21
  53. data/app/assets/javascripts/pageflow/editor/views/edit_widgets_view.js +1 -3
  54. data/app/assets/javascripts/pageflow/editor/views/file_meta_data_item_value_view.js +10 -1
  55. data/app/assets/javascripts/pageflow/editor/views/inputs/reference_input_view.js +36 -4
  56. data/app/assets/javascripts/pageflow/editor/views/inputs/theme_input_view.js +26 -0
  57. data/app/assets/javascripts/pageflow/editor/views/model_thumbnail_view.js +28 -14
  58. data/app/assets/javascripts/pageflow/editor/views/static_thumbnail_view.js +20 -0
  59. data/app/assets/javascripts/pageflow/editor/views/theme_item_view.js +41 -0
  60. data/app/assets/javascripts/pageflow/editor/views/widget_item_view.js +49 -0
  61. data/app/assets/javascripts/pageflow/history.js +7 -1
  62. data/app/assets/javascripts/pageflow/media_player/volume_fading/interval.js +65 -0
  63. data/app/assets/javascripts/pageflow/media_player/volume_fading/noop.js +5 -0
  64. data/app/assets/javascripts/pageflow/media_player/volume_fading/web_audio.js +109 -0
  65. data/app/assets/javascripts/pageflow/media_player/volume_fading.js +14 -65
  66. data/app/assets/javascripts/pageflow/slideshow/dom_order_scroll_navigator.js +5 -2
  67. data/app/assets/javascripts/pageflow/slideshow.js +19 -8
  68. data/app/assets/javascripts/pageflow/ui/views/configuration_editor_view.js +4 -0
  69. data/app/assets/javascripts/pageflow/ui/views/inputs/text_area_input_view.js +10 -5
  70. data/app/assets/javascripts/pageflow/ui/views/inputs/text_input_view.js +4 -48
  71. data/app/assets/javascripts/pageflow/ui/views/mixins/input_with_placeholder_text.js +58 -0
  72. data/app/assets/javascripts/pageflow/vendor.js +16 -0
  73. data/app/assets/javascripts/pageflow/video_player/get_media_element_method.js +6 -0
  74. data/app/assets/javascripts/pageflow/video_player.js +2 -0
  75. data/app/assets/stylesheets/pageflow/admin/entries.scss +1 -1
  76. data/app/assets/stylesheets/pageflow/admin/quotas.scss +1 -1
  77. data/app/assets/stylesheets/pageflow/admin.scss +2 -0
  78. data/app/assets/stylesheets/pageflow/base.scss +0 -1
  79. data/app/assets/stylesheets/pageflow/editor/base.scss +2 -0
  80. data/app/assets/stylesheets/pageflow/editor/change_theme.scss +114 -0
  81. data/app/assets/stylesheets/pageflow/editor/static_thumbnails.scss +4 -0
  82. data/app/assets/stylesheets/pageflow/editor/widgets.scss +26 -2
  83. data/app/assets/stylesheets/pageflow/page.scss +1 -14
  84. data/app/assets/stylesheets/pageflow/themes/default/indicators.scss +12 -0
  85. data/app/assets/stylesheets/pageflow/themes/default/loading_spinner.scss +11 -0
  86. data/app/assets/stylesheets/pageflow/themes/default/logo/alignment.scss +27 -0
  87. data/app/assets/stylesheets/pageflow/themes/default/logo/variant/background_image.scss +20 -2
  88. data/app/assets/stylesheets/pageflow/themes/default/logo/variant/watermark.scss +4 -1
  89. data/app/assets/stylesheets/pageflow/themes/default/page/line_lengths.scss +113 -0
  90. data/app/assets/stylesheets/pageflow/themes/default/page.scss +1 -0
  91. data/app/controllers/pageflow/editor/widgets_controller.rb +15 -1
  92. data/app/controllers/pageflow/entries_controller.rb +1 -1
  93. data/app/helpers/pageflow/admin/entries_helper.rb +0 -9
  94. data/app/helpers/pageflow/admin/memberships_helper.rb +43 -123
  95. data/app/helpers/pageflow/admin/users_helper.rb +15 -0
  96. data/app/helpers/pageflow/entries_helper.rb +3 -1
  97. data/app/helpers/pageflow/entry_json_seed_helper.rb +9 -3
  98. data/app/helpers/pageflow/public_i18n_helper.rb +2 -2
  99. data/app/helpers/pageflow/quota_helper.rb +2 -2
  100. data/app/helpers/pageflow/social_share_helper.rb +3 -2
  101. data/app/helpers/pageflow/themes_helper.rb +11 -3
  102. data/app/helpers/pageflow/widgets_helper.rb +10 -2
  103. data/app/jobs/pageflow/prune_auto_snapshots_job.rb +9 -0
  104. data/app/mailers/pageflow/user_mailer.rb +11 -1
  105. data/app/models/concerns/pageflow/feature_target.rb +1 -1
  106. data/app/models/concerns/pageflow/hosted_file.rb +9 -0
  107. data/app/models/concerns/pageflow/output_source.rb +2 -1
  108. data/app/models/concerns/pageflow/serialization_blacklist.rb +19 -0
  109. data/app/models/concerns/pageflow/serialized_configuration.rb +17 -0
  110. data/app/models/concerns/pageflow/theme_referencer.rb +23 -0
  111. data/app/models/pageflow/account.rb +6 -1
  112. data/app/models/pageflow/account_member_query.rb +6 -12
  113. data/app/models/pageflow/account_role_query.rb +68 -0
  114. data/app/models/pageflow/application_query.rb +13 -0
  115. data/app/models/pageflow/application_record.rb +5 -0
  116. data/app/models/pageflow/audio_file.rb +1 -1
  117. data/app/models/pageflow/auto_snapshot_pruning.rb +26 -0
  118. data/app/models/pageflow/chapter.rb +4 -8
  119. data/app/models/pageflow/draft_entry.rb +2 -1
  120. data/app/models/pageflow/edit_lock.rb +11 -5
  121. data/app/models/pageflow/encoding_confirmation.rb +2 -1
  122. data/app/models/pageflow/entry.rb +13 -2
  123. data/app/models/pageflow/entry_publication.rb +2 -0
  124. data/app/models/pageflow/entry_role_query.rb +24 -9
  125. data/app/models/pageflow/entry_title_or_account_name_query.rb +33 -0
  126. data/app/models/pageflow/file_usage.rb +3 -7
  127. data/app/models/pageflow/folder.rb +1 -1
  128. data/app/models/pageflow/home_button.rb +1 -1
  129. data/app/models/pageflow/image_file.rb +22 -4
  130. data/app/models/pageflow/invitation_form.rb +10 -4
  131. data/app/models/pageflow/managed_user_query.rb +44 -0
  132. data/app/models/pageflow/membership.rb +1 -1
  133. data/app/models/pageflow/overview_button.rb +3 -4
  134. data/app/models/pageflow/page.rb +3 -7
  135. data/app/models/pageflow/potential_memberships.rb +112 -0
  136. data/app/models/pageflow/published_entry.rb +2 -1
  137. data/app/models/pageflow/revision.rb +13 -4
  138. data/app/models/pageflow/storyline.rb +3 -4
  139. data/app/models/pageflow/text_track_file.rb +1 -1
  140. data/app/models/pageflow/theming.rb +15 -10
  141. data/app/models/pageflow/url_template.rb +8 -2
  142. data/app/models/pageflow/user_name_query.rb +30 -0
  143. data/app/models/pageflow/video_file.rb +5 -1
  144. data/app/models/pageflow/widget.rb +3 -1
  145. data/app/models/pageflow/zencoder_attachment.rb +16 -5
  146. data/app/policies/pageflow/account_policy.rb +31 -61
  147. data/app/policies/pageflow/application_policy.rb +6 -0
  148. data/app/policies/pageflow/entry_policy.rb +11 -3
  149. data/app/policies/pageflow/membership_policy.rb +1 -2
  150. data/app/policies/pageflow/user_policy.rb +20 -1
  151. data/app/views/admin/accounts/_form.html.erb +4 -4
  152. data/app/views/admin/accounts/_theming_defaults_inline_help.html.erb +5 -0
  153. data/app/views/admin/memberships/_form.html.erb +9 -14
  154. data/app/views/admin/memberships/_role_hint.html.arb +1 -1
  155. data/app/views/admin/users/invitation.html.erb +18 -9
  156. data/app/views/admin/users/me.html.erb +2 -2
  157. data/app/views/admin/users/quota_state.html.erb +1 -0
  158. data/app/views/components/pageflow/admin/add_membership_button.rb +81 -0
  159. data/app/views/components/pageflow/admin/members_tab.rb +6 -4
  160. data/app/views/components/pageflow/admin/revisions_tab.rb +16 -4
  161. data/app/views/components/pageflow/admin/user_accounts_tab.rb +8 -2
  162. data/app/views/components/pageflow/admin/user_entries_tab.rb +6 -2
  163. data/app/views/components/pageflow/admin/users_tab.rb +9 -5
  164. data/app/views/layouts/pageflow/application.html.erb +2 -1
  165. data/app/views/pageflow/admin/users/_quota_exhausted.html.erb +1 -0
  166. data/app/views/pageflow/admin/users/_quota_state.html.erb +7 -0
  167. data/app/views/pageflow/config/_editor_seeds.json.jbuilder +2 -0
  168. data/app/views/pageflow/editor/entries/_entry.json.jbuilder +1 -0
  169. data/app/views/pageflow/editor/entries/seed.json.erb +3 -1
  170. data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +1 -1
  171. data/app/views/pageflow/editor/themings/_theming.json.jbuilder +0 -7
  172. data/app/views/pageflow/editor/widgets/_widget.json.jbuilder +1 -1
  173. data/app/views/pageflow/entries/_entry.html.erb +5 -5
  174. data/app/views/pageflow/entries/edit.html.erb +1 -1
  175. data/app/views/pageflow/entries/show.html.erb +1 -1
  176. data/app/views/pageflow/entry_json_seed/_entry.json.jbuilder +1 -0
  177. data/app/views/pageflow/themes/_theme.json.jbuilder +13 -0
  178. data/config/initializers/admin_resource_tabs.rb +19 -6
  179. data/config/initializers/features.rb +1 -0
  180. data/config/locales/de.yml +26 -3
  181. data/config/locales/en.yml +26 -3
  182. data/db/migrate/20170201074328_add_configuration_to_widgets.rb +5 -0
  183. data/db/migrate/20170222124848_update_video_file_output_presences.rb +1 -1
  184. data/db/migrate/20170315130000_add_theme_name_to_revisions.rb +12 -0
  185. data/db/migrate/20170912165050_reset_copied_snapshot_type.rb +24 -0
  186. data/lib/generators/pageflow/routes/routes_generator.rb +11 -1
  187. data/lib/generators/pageflow/seeds/seeds_generator.rb +5 -0
  188. data/lib/generators/pageflow/seeds/templates/seeds.rb +5 -3
  189. data/lib/generators/pageflow/theme/templates/preview.png +0 -0
  190. data/lib/generators/pageflow/theme/templates/preview_thumbnail.png +0 -0
  191. data/lib/generators/pageflow/theme/theme_generator.rb +3 -0
  192. data/lib/pageflow/ability_mixin.rb +27 -6
  193. data/lib/pageflow/active_admin_can_can_fix.rb +34 -0
  194. data/lib/pageflow/configuration/permissions.rb +27 -0
  195. data/lib/pageflow/configuration.rb +28 -0
  196. data/lib/pageflow/engine.rb +25 -19
  197. data/lib/pageflow/images/palette.png +0 -0
  198. data/lib/pageflow/seeds.rb +1 -1
  199. data/lib/pageflow/theme.rb +8 -0
  200. data/lib/pageflow/version.rb +1 -1
  201. data/lib/pageflow/widget_type.rb +13 -0
  202. data/lib/pageflow/zencoder_video_output_definition.rb +16 -16
  203. data/lib/tasks/pageflow_tasks.rake +14 -0
  204. data/spec/factories/entries.rb +4 -0
  205. data/spec/factories/revisions.rb +10 -0
  206. data/spec/factories/users.rb +6 -0
  207. data/spec/factories/video_files.rb +4 -0
  208. data/vendor/assets/javascripts/audio5.min.js +3 -0
  209. metadata +78 -15
  210. data/app/assets/javascripts/pageflow/editor/models/mixins/widget_subject.js +0 -37
  211. data/app/assets/javascripts/pageflow/editor/utils/reload_stylesheet.js +0 -9
  212. data/app/assets/stylesheets/pageflow/text_variants.scss +0 -24
  213. data/app/views/admin/accounts/_widgets_inline_help.html.erb +0 -5
  214. data/app/views/admin/memberships/_entity_account_input.html.erb +0 -5
  215. data/app/views/admin/memberships/_entity_entry_input.html.erb +0 -5
  216. data/app/views/admin/users/_quota_exhausted.html.erb +0 -1
  217. data/app/views/components/pageflow/admin/add_membership_button_if_needed.rb +0 -62
@@ -1,7 +1,6 @@
1
1
  module Pageflow
2
2
  ActiveAdmin.register Account, :as => 'Account' do
3
- menu priority: 3,
4
- if: proc { authorized?(:index, :accounts) }
3
+ menu({priority: 3}.merge(Pageflow.config.account_admin_menu_options))
5
4
 
6
5
  config.batch_actions = false
7
6
 
@@ -36,8 +35,29 @@ module Pageflow
36
35
  end
37
36
  end
38
37
 
38
+ csv do
39
+ column :name
40
+ column :entries_count
41
+ column :users_count
42
+ end
43
+
39
44
  filter :name
40
45
 
46
+ searchable_select_options(text_attribute: :name,
47
+ scope: lambda do
48
+ Account
49
+ .accessible_by(current_ability, :read)
50
+ .order(:name)
51
+ end)
52
+
53
+ searchable_select_options(name: :member_addable,
54
+ text_attribute: :name,
55
+ scope: lambda do
56
+ AccountPolicy::Scope.new(current_user, Account)
57
+ .member_addable
58
+ .order(:name)
59
+ end)
60
+
41
61
  form :partial => 'form'
42
62
 
43
63
  show :title => :name do |account|
@@ -90,8 +110,7 @@ module Pageflow
90
110
  result = params.permit(account: permitted_account_attributes)
91
111
 
92
112
  if result[:account]
93
- feature_states = params[:account][:feature_states].try(:permit!)
94
- result[:account].merge!(feature_states: feature_states || {})
113
+ permit_feature_states(result[:account])
95
114
  end
96
115
 
97
116
  result
@@ -137,6 +156,13 @@ module Pageflow
137
156
  []
138
157
  end
139
158
  end
159
+
160
+ def permit_feature_states(attributes)
161
+ if params[:id] && authorized?(:update_feature_configuration_on, resource)
162
+ feature_states = params[:account][:feature_states].try(:permit!)
163
+ attributes.merge!(feature_states: feature_states || {})
164
+ end
165
+ end
140
166
  end
141
167
  end
142
168
  end
@@ -48,10 +48,19 @@ module Pageflow
48
48
  end
49
49
  end
50
50
 
51
+ csv do
52
+ column :slug
53
+ column :title
54
+ column :created_at
55
+ column :edited_at
56
+ column :published_at
57
+ end
58
+
51
59
  filter :title
52
60
  filter :account,
53
- if: ->(_) { authorized?(:index, :accounts) },
54
- collection: -> { Account.accessible_by(current_ability, :read) }
61
+ as: :searchable_select,
62
+ ajax: true,
63
+ if: ->(_) { authorized?(:index, :accounts) }
55
64
  filter :created_at
56
65
  filter :edited_at
57
66
  filter :first_published_at
@@ -61,27 +70,62 @@ module Pageflow
61
70
  collection: -> { collection_for_entry_publication_states }
62
71
 
63
72
  sidebar :folders, only: :index do
64
- text_node(link_to(I18n.t('pageflow.admin.entries.add_folder'),
65
- new_admin_folder_path,
66
- class: 'new'))
73
+ if AccountPolicy::Scope.new(current_user, Account).folder_addable.any?
74
+ text_node(link_to(I18n.t('pageflow.admin.entries.add_folder'),
75
+ new_admin_folder_path,
76
+ class: 'new'))
77
+ end
67
78
  grouped_folder_list(Folder.accessible_by(current_ability, :read).includes(:account),
68
79
  active_id: params[:folder_id],
69
80
  grouped_by_accounts: authorized?(:see, :accounts))
70
81
  end
71
82
 
83
+ searchable_select_options(name: :eligible_accounts,
84
+ text_attribute: :name,
85
+ scope: lambda do
86
+ AccountPolicy::Scope
87
+ .new(current_user, Account)
88
+ .entry_movable
89
+ .order(:name)
90
+ end)
91
+
92
+ searchable_select_options(name: :eligible_themings,
93
+ text_attribute: :name,
94
+ scope: lambda do |params|
95
+ entry = Entry.find(params[:entry_id])
96
+
97
+ ThemingPolicy::Scope
98
+ .new(current_user, Theming)
99
+ .themings_allowed_for(entry.account)
100
+ end)
101
+
72
102
  form do |f|
73
103
  f.inputs do
74
104
  f.input :title, hint: I18n.t('pageflow.admin.entries.title_hint')
75
105
 
76
106
  if authorized?(:update_account_on, resource)
77
- f.input :account,
78
- collection: eligible_accounts,
107
+ f.input(:account,
108
+ as: :searchable_select,
79
109
  include_blank: false,
80
- input_html: {class: 'entry_account_input'}
110
+ ajax: {
111
+ resource: Entry,
112
+ collection_name: :eligible_accounts
113
+ },
114
+ input_html: {class: 'entry_account_input', style: 'width: 200px'})
81
115
  end
82
116
 
83
117
  if authorized?(:update_theming_on, resource) && !f.object.new_record?
84
- f.input :theming, collection: eligible_themings, include_blank: false
118
+ f.input(:theming,
119
+ as: :searchable_select,
120
+ ajax: {
121
+ resource: Entry,
122
+ collection_name: :eligible_themings,
123
+ params: {
124
+ entry_id: resource.id
125
+ }
126
+ },
127
+ include_blank: false,
128
+ input_html: {style: 'width: 200px'})
85
129
  end
86
130
 
87
131
  if authorized?(:configure_folder_for, resource)
@@ -167,6 +211,12 @@ module Pageflow
167
211
  entry.theming ||= entry.account.default_theming
168
212
  end
169
213
 
214
+ before_update do |entry|
215
+ if entry.account_id_changed? && !authorized?(:update_theming_on, resource)
216
+ entry.theming = entry.account.default_theming
217
+ end
218
+ end
219
+
170
220
  def update
171
221
  update! do |success, _|
172
222
  success.html { redirect_to(admin_entry_path(resource, params.slice(:tab))) }
@@ -6,6 +6,63 @@ module Pageflow
6
6
 
7
7
  form partial: 'form'
8
8
 
9
+ searchable_select_options(name: :potential_accounts_for_user,
10
+ text_attribute: :name,
11
+ scope: lambda do |params|
12
+ user = User.find(params[:parent_id])
13
+
14
+ PotentialMemberships
15
+ .creatable_by(current_user)
16
+ .accounts_for_user(user)
17
+ .order(:name)
18
+ end)
19
+
20
+ searchable_select_options(name: :potential_entries_for_user,
21
+ display_text: lambda do |entry|
22
+ [entry.try(:account_name), entry.title].compact.join(' / ')
23
+ end,
24
+ scope: lambda do |params|
25
+ user = User.find(params[:parent_id])
26
+ entries = PotentialMemberships
27
+ .creatable_by(current_user)
28
+ .entries_for_user(user)
29
+
30
+ if can?(:see, :accounts)
31
+ entries.include_account_name.order('account_name', :title)
32
+ else
33
+ entries.order(:title)
34
+ end
35
+ end,
36
+ filter: lambda do |term, scope|
37
+ EntryTitleOrAccountNameQuery::Scope.new(term, scope).resolve
38
+ end)
39
+
40
+ searchable_select_options(name: :potential_users_for_account,
41
+ text_attribute: :formal_name,
42
+ scope: lambda do |params|
43
+ account = Account.find(params[:parent_id])
44
+ PotentialMemberships
45
+ .creatable_by(current_user)
46
+ .users_for_account(account)
47
+ .order(:last_name, :first_name)
48
+ end,
49
+ filter: lambda do |term, scope|
50
+ UserNameQuery::Scope.new(term, scope).resolve
51
+ end)
52
+
53
+ searchable_select_options(name: :potential_users_for_entry,
54
+ text_attribute: :formal_name,
55
+ scope: lambda do |params|
56
+ entry = Entry.find(params[:parent_id])
57
+ PotentialMemberships
58
+ .creatable_by(current_user)
59
+ .users_for_entry(entry)
60
+ .order(:last_name, :first_name)
61
+ end,
62
+ filter: lambda do |term, scope|
63
+ UserNameQuery::Scope.new(term, scope).resolve
64
+ end)
65
+
9
66
  controller do
10
67
  belongs_to :entry, parent_class: Pageflow::Entry, polymorphic: true
11
68
  belongs_to :account, parent_class: Pageflow::Account, polymorphic: true
@@ -14,12 +71,6 @@ module Pageflow
14
71
  helper Pageflow::Admin::MembershipsHelper
15
72
  helper Pageflow::Admin::FormHelper
16
73
 
17
- def permitted_params
18
- result = params.permit(membership: [:user_id, :entity_id, :entity_type, :role])
19
- restrict_attributes(result[:membership]) if result[:membership]
20
- result
21
- end
22
-
23
74
  def index
24
75
  if params[:user_id].present?
25
76
  redirect_to admin_user_url(params[:user_id])
@@ -1,6 +1,6 @@
1
1
  module Pageflow
2
2
  ActiveAdmin.register User do
3
- menu priority: 2, if: proc { authorized?(:index, current_user) }
3
+ menu priority: 2
4
4
 
5
5
  actions :all, except: [:new, :create]
6
6
 
@@ -20,6 +20,16 @@ module Pageflow
20
20
  boolean_status_tag_column :suspended?
21
21
  end
22
22
 
23
+ csv do
24
+ column :id
25
+ column :first_name
26
+ column :last_name
27
+ column :email
28
+ column :last_sign_in_at
29
+ column :sign_in_count
30
+ column :suspended?
31
+ end
32
+
23
33
  filter :last_name
24
34
  filter :first_name
25
35
  filter :email
@@ -43,7 +53,9 @@ module Pageflow
43
53
  row :locale do
44
54
  I18n.t('language', locale: user.locale)
45
55
  end
46
- boolean_status_tag_row(:admin?, 'admin warning')
56
+ if authorized?(:see_admin_status, user)
57
+ boolean_status_tag_row(:admin?, 'admin warning')
58
+ end
47
59
  end
48
60
 
49
61
  para do
@@ -108,10 +120,19 @@ module Pageflow
108
120
  end
109
121
  end
110
122
 
123
+ collection_action :quota_state do
124
+ @account = Pageflow::Account.find(params[:account_id])
125
+ authorize!(:add_member_to, @account)
126
+
127
+ render(layout: false)
128
+ end
129
+
111
130
  collection_action 'me', title: I18n.t('pageflow.admin.users.account'), method: [:get, :patch] do
131
+ @user = User.find(current_user.id)
132
+
112
133
  if request.patch?
113
- if current_user.update_with_password(user_profile_params)
114
- sign_in current_user, bypass: true
134
+ if @user.update_with_password(user_profile_params)
135
+ sign_in @user, bypass: true
115
136
  redirect_to admin_root_path, notice: I18n.t('pageflow.admin.users.me.updated')
116
137
  end
117
138
  end
@@ -70,9 +70,11 @@ jQuery(function($) {
70
70
  }
71
71
  });
72
72
 
73
- $('#folders_sidebar_section')
74
- .append('<a href="#" class="edit_toggle edit" title="Bearbeiten"></a>')
75
- .append('<a href="#" class="edit_toggle done" title="Fertig"></a>');
73
+ if ($('#folders_sidebar_section a.new').length > 0) {
74
+ $('#folders_sidebar_section')
75
+ .append('<a href="#" class="edit_toggle edit" title="Bearbeiten"></a>')
76
+ .append('<a href="#" class="edit_toggle done" title="Fertig"></a>');
77
+ }
76
78
 
77
79
  $('#folders_sidebar_section .edit_toggle').on('click', function() {
78
80
  $('#folders_sidebar_section').toggleClass('editable');
@@ -0,0 +1,33 @@
1
+ jQuery(function($) {
2
+ $('.admin_users form.pageflow_invitation_form').each(function() {
3
+ var quotaStateContainer = $('#quota_state_container', this);
4
+ var accountSelect = $('#invitation_form_membership_entity_id', this);
5
+ var fieldsets = $('#invitation_form_details', this).add('fieldset.actions', this);
6
+
7
+ function updateQutaState() {
8
+ var selectedAccountId = accountSelect.val();
9
+
10
+ $.get('/admin/users/quota_state?account_id=' + selectedAccountId)
11
+ .success(function(html) {
12
+ quotaStateContainer.html(html);
13
+ updateForm();
14
+ });
15
+ }
16
+
17
+ function updateForm() {
18
+ if (quotaAvailable()) {
19
+ fieldsets.show();
20
+ }
21
+ else {
22
+ fieldsets.hide();
23
+ }
24
+ }
25
+
26
+ function quotaAvailable() {
27
+ return !!quotaStateContainer.find('[data-state=available]').length;
28
+ }
29
+
30
+ accountSelect.on('change', updateQutaState);
31
+ updateForm();
32
+ });
33
+ });
@@ -1,4 +1,7 @@
1
1
  //= require jquery-ui/droppable
2
+ //= require active_admin/searchable_select
3
+ //= require select2_locale_de
2
4
 
3
5
  //= require ./admin/accounts
4
- //= require ./admin/entries
6
+ //= require ./admin/entries
7
+ //= require ./admin/users
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Obtain the globally shared audio context. There can only be a
3
+ * limited number of `AudioContext` objects in one page.
4
+ *
5
+ * @since 12.1
6
+ */
7
+ pageflow.audioContext = {
8
+ /**
9
+ * @returns [AudioContext]
10
+ * Returns `null` if web audio API is not supported or creating
11
+ * the context fails.
12
+ */
13
+ get: function() {
14
+ var AudioContext = window.AudioContext || window.webkitAudioContext;
15
+
16
+ if (typeof this._audioContext === 'undefined') {
17
+ try {
18
+ this._audioContext = AudioContext && new AudioContext();
19
+ }
20
+ catch(e) {
21
+ this._audioContext = null;
22
+ pageflow.log('Failed to create AudioContext.', {force: true});
23
+ }
24
+ }
25
+
26
+ return this._audioContext;
27
+ }
28
+ };
@@ -0,0 +1,5 @@
1
+ pageflow.AudioPlayer.getMediaElementMethod = function(player) {
2
+ player.getMediaElement = function() {
3
+ return player.audio.audio;
4
+ };
5
+ };
@@ -7,6 +7,7 @@
7
7
  //= require ./audio_player/seek_with_invalid_state_handling
8
8
  //= require ./audio_player/rewind_method
9
9
  //= require ./audio_player/pause_in_background
10
+ //= require ./audio_player/get_media_element_method
10
11
 
11
12
  /**
12
13
  * Playing audio sources
@@ -63,6 +64,7 @@ pageflow.AudioPlayer = function(sources, options) {
63
64
 
64
65
  pageflow.AudioPlayer.seekWithInvalidStateHandling(audio);
65
66
  pageflow.AudioPlayer.rewindMethod(audio);
67
+ pageflow.AudioPlayer.getMediaElementMethod(audio);
66
68
 
67
69
  audio.src = function(sources) {
68
70
  ready.then(function() {
@@ -1,31 +1,12 @@
1
- // This is a manifest file that'll be compiled into application.js, which will include all the files
2
- // listed below.
3
- //
4
- // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
- // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
- //
7
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
- // compiled file.
9
- //
10
- // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
- // about supported directives.
12
- //
1
+ // base JavaScript file for Pageflow.
2
+ // This file is meant to hold code we develop.
3
+ // And vendor code that changes a lot.
13
4
 
14
5
  //= require polyfills/bind
15
6
 
16
- //= require i18n
17
- //= require jquery
18
- //= require jquery-ui/widget
19
- //= require jquery_ujs
20
7
  //= require ./jquery_utils
21
- //= require iscroll
22
- //= require audio5.min
23
8
  //= require ./videojs
24
- //= require jquery.fullscreen
25
- //= require jquery.placeholder
26
9
 
27
- //= require react
28
- //= require backbone-rails
29
10
  //= require_self
30
11
 
31
12
  //= require ./object
@@ -42,6 +23,7 @@
42
23
  //= require ./features
43
24
  //= require ./audio
44
25
  //= require ./audio_player
26
+ //= require ./audio_context
45
27
  //= require ./video_player
46
28
  //= require ./visited
47
29
  //= require ./print_layout