effective_committees 0.5.1 → 0.6.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: effc4579e15d6bbbf45ffb1113ebb129a0d809b9e600da98c3b10c5a70e2d385
4
- data.tar.gz: 25ffa06fe7742f83f08fbac7c79521aa3b2155deb2639fa36559164bfc243c14
3
+ metadata.gz: 4a528b08eb7dc0d58d450aaa85a537a2795b1eee6f2786d98c76f32fd1570fa8
4
+ data.tar.gz: f2d84ed3da7694d91d49035852da6a9a2da0c036fb0343845426032d178068fe
5
5
  SHA512:
6
- metadata.gz: 1593abb4700a2d23026405da7a7acfb82e042eac5a856bb84efb37afcbb7592817bcb53ab0f5870a10965258d905f9d06deaecd2af976adac4c244e6736417f5
7
- data.tar.gz: 9bc7a3f7dc8aed23178a8e8d11704e09b470bd782e13a947de3bf2f6f13f1530ec71d6e636499bf4f07b71b7c3a9d97a01ec49f195a39b3726e7303100013540
6
+ metadata.gz: 0f66144da2d5716c7a0bd7e0be84f7da454200f3b9933bfb574924b67e73cf40d12f48f6b3e2f3cb6c09253a97d437c41def61cc53a64bb79ea280cbd4fb2051
7
+ data.tar.gz: 7ca4214b46b4ac71deaf33e9725fd7b798ba7b511781ca99d4a999bef28f063119a8f10d776f77044763ede1b4f5b9db6d7ee2570defd98464816f00c1aa8d93
@@ -5,6 +5,8 @@ module Admin
5
5
 
6
6
  include Effective::CrudController
7
7
 
8
+ submit :bulk_upload, 'Bulk upload'
9
+
8
10
  private
9
11
 
10
12
  def permitted_params
@@ -1,6 +1,8 @@
1
1
  module Admin
2
2
  class EffectiveCommitteeFilesDatatable < Effective::Datatable
3
3
  datatable do
4
+ reorder :position
5
+
4
6
  col :updated_at, visible: false
5
7
  col :created_at, visible: false
6
8
 
@@ -18,11 +18,14 @@ module Effective
18
18
  file_id :integer
19
19
  file_created_at :datetime
20
20
 
21
+ position :integer
22
+
21
23
  timestamps
22
24
  end
23
25
 
24
- before_validation do
25
- self.committee ||= committee_folder&.committee
26
+ before_validation(if: -> { committee_folder.present? }) do
27
+ self.committee ||= committee_folder.committee
28
+ self.position ||= (committee_folder.committee_files.map { |obj| obj.position }.compact.max || -1) + 1
26
29
  end
27
30
 
28
31
  before_validation(if: -> { file.attached? }) do
@@ -30,10 +33,11 @@ module Effective
30
33
  end
31
34
 
32
35
  scope :deep, -> { with_attached_file.includes(:committee, :committee_folder) }
33
- scope :sorted, -> { order(:title) }
36
+ scope :sorted, -> { order(:position) }
34
37
 
35
38
  validates :title, presence: true
36
39
  validates :file, presence: true
40
+ validates :position, presence: true, if: -> { committee_folder.present? }
37
41
 
38
42
  def to_s
39
43
  title.presence || 'file'
@@ -12,6 +12,8 @@ module Effective
12
12
  has_rich_text :body
13
13
  has_many :committee_files, -> { Effective::CommitteeFile.sorted.deep }, dependent: :destroy, inverse_of: :committee_folder
14
14
 
15
+ has_many_attached :files
16
+
15
17
  effective_resource do
16
18
  title :string
17
19
  slug :string
@@ -38,5 +40,9 @@ module Effective
38
40
  title.presence || 'folder'
39
41
  end
40
42
 
43
+ def bulk_upload!
44
+ files.each { |file| committee_files.create(file: file.blob) }
45
+ true
46
+ end
41
47
  end
42
48
  end
@@ -6,11 +6,16 @@
6
6
 
7
7
  - if inline_datatable? && inline_datatable.attributes[:committee_folder_id].present?
8
8
  = f.hidden_field :committee_folder_id
9
- - elsif inline_datatable?
10
- = f.select :committee_folder_id, Effective::CommitteeFolder.deep.where(committee: committee_file.committee_id), label: "Folder"
9
+ - elsif f.object.persisted?
10
+ = f.static_field :committee
11
+ = f.select :committee_folder_id, Effective::CommitteeFolder.where(committee: f.object.committee), label: "Folder"
11
12
  - else
12
- = f.select :committee_id, Effective::Committee.sorted.all
13
- = f.select :committee_folder_id, Effective::CommitteeFolder.sorted.all, label: "Folder"
13
+ = f.select :committee_id, Effective::Committee.sorted.all,
14
+ 'data-load-ajax-url': effective_committees.new_admin_committee_file_path,
15
+ 'data-load-ajax-div': '#effective-committees-ajax'
16
+
17
+ #effective-committees-ajax
18
+ = f.select :committee_folder_id, Effective::CommitteeFolder.where(committee: f.object.committee), label: "Folder"
14
19
 
15
20
  = f.file_field :file
16
21
  = f.text_area :notes
@@ -1,6 +1,8 @@
1
1
  = tabs do
2
2
  - if committee_folder.persisted?
3
3
  = tab 'Folder Files' do
4
+ = render('admin/committee_folders/form_bulk_upload', committee_folder: committee_folder)
5
+
4
6
  - datatable = Admin::EffectiveCommitteeFilesDatatable.new(committee_folder: committee_folder, committee: committee_folder.committee)
5
7
  = render_inline_datatable(datatable)
6
8
 
@@ -0,0 +1,3 @@
1
+ = effective_form_with(model: [:admin, committee_folder], engine: true, autosave: true) do |f|
2
+ = f.file_field :files, multiple: true, label: 'Bulk upload', hint: 'Select or drag and drop multiple files to upload'
3
+ %div{style: 'display: none;'}= f.save 'Bulk upload'
@@ -1,7 +1,7 @@
1
1
  = effective_form_with(model: [:admin, committee_folder], engine: true) do |f|
2
2
  - if inline_datatable?
3
- = f.hidden_field :committee_id
4
3
  = f.hidden_field :committee_type
4
+ = f.hidden_field :committee_id
5
5
  - else
6
6
  = f.select :committee, { committees_label => Effective::Committee.sorted }, polymorphic: true
7
7
 
@@ -14,4 +14,4 @@
14
14
  - else
15
15
  = f.rich_text_area :body, hint: "Displayed on the #{committee_folder_label} page"
16
16
 
17
- = effective_submit(f)
17
+ = f.submit
@@ -15,7 +15,7 @@
15
15
  = f.select :user_ids, current_user.class.all, label: 'Select user(s)', required: true, ajax_url: ajax_url
16
16
 
17
17
  - if inline_datatable? && inline_datatable.attributes[:user_id].present?
18
- = f.select :committee_ids, Effective::Committee.sorted.all, label: "Select #{commitee_label}(s)"
18
+ = f.select :committee_ids, Effective::Committee.sorted.all, label: "Select #{committee_label}(s)"
19
19
 
20
20
  - unless inline_datatable?
21
21
  = f.select :committee_id, Effective::Committee.sorted.all
@@ -29,7 +29,7 @@
29
29
 
30
30
  .row
31
31
  .col= f.date_field :start_on
32
- .col= f.date_field :end_on, hint: 'End dating will remove access'
32
+ .col= f.date_field :end_on, hint: 'End dating will remove access', date_linked: false
33
33
 
34
34
  - if EffectiveCommittees.use_effective_roles
35
35
  = f.checks :roles, EffectiveRoles.roles_collection(f.object, skip_disabled: true)
@@ -2,8 +2,8 @@
2
2
 
3
3
  = acts_as_slugged_fields(f, url: (effective_committees.committee_url(f.object) rescue nil))
4
4
 
5
- = f.check_box :display_on_index, label: "Show on the member-only #{link_to "Volunteers and Committees", effective_committees.volunteers_and_committees_path} page"
6
- = f.check_box :display_on_dashboard, label: "Show on the <a href='/committees'>My #{committee_label.pluralize}</a> page".html_safe
5
+ = f.check_box :display_on_index, label: "Show on the member-only #{link_to "Volunteers and Committees", effective_committees.volunteers_and_committees_path, target: '_blank'} page"
6
+ = f.check_box :display_on_dashboard, label: "Show on the #{link_to "My #{committee_label.pluralize}", effective_committees.committees_path, target: '_blank'} page".html_safe
7
7
 
8
8
  - if defined?(EffectiveArticleEditor)
9
9
  = f.article_editor :body, hint: "Shown on the #{committee_label} page."
@@ -11,15 +11,14 @@
11
11
  - committee_folder = log.associated.try(:committee_folder) || log.associated
12
12
  - link_to_committee_folder = link_to(committee_folder, effective_committees.committee_committee_folder_path(committee, committee_folder))
13
13
 
14
- -# TODO - this errors out if it isn't on the dashboard
15
- -# link_to_file = link_to(log.associated, main_app.url_for(log.associated.try(:file)))
14
+ - committee_file = log.associated.try(:file).try(:blob)
15
+ - link_to_file = link_to(log.associated, (committee_file ? url_for(committee_file) : '#'))
16
16
 
17
17
  - if logs.length == 1 && log.associated_type == 'Effective::CommitteeFolder'
18
18
  %li Folder #{link_to_committee_folder} was added to #{link_to_committee}.
19
19
 
20
20
  - elsif logs.length == 1 && log.associated_type == 'Effective::CommitteeFile'
21
- %li File {filename} was added to #{link_to_committee} &rarr; #{link_to_committee_folder}.
22
- -# %li File #{link_to_file} was added to #{link_to_committee} &rarr; #{link_to_committee_folder}.
21
+ %li File #{link_to_file} was added to #{link_to_committee} &rarr; #{link_to_committee_folder}.
23
22
 
24
23
  - elsif logs.length > 1 && logs.all? { |log| log.associated_type == 'Effective::CommitteeFile' }
25
24
  %li #{logs.length} files were added to #{link_to_committee} &rarr; #{link_to_committee_folder}.
@@ -1,5 +1,5 @@
1
1
  = tabs do
2
- = tab(commitee_label) do
2
+ = tab(committee_label) do
3
3
  = render 'effective/committees/form_committee', committee: committee
4
4
 
5
5
  - if committee.persisted?
@@ -72,6 +72,8 @@ class CreateEffectiveCommittees < ActiveRecord::Migration[6.0]
72
72
  t.string :title
73
73
  t.text :notes
74
74
 
75
+ t.integer :position
76
+
75
77
  t.datetime :updated_at
76
78
  t.datetime :created_at
77
79
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveCommittees
2
- VERSION = '0.5.1'.freeze
2
+ VERSION = '0.6.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_committees
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
@@ -202,6 +202,7 @@ files:
202
202
  - app/views/admin/committee_files/_form.html.haml
203
203
  - app/views/admin/committee_files/_form_committee_file.html.haml
204
204
  - app/views/admin/committee_folders/_form.html.haml
205
+ - app/views/admin/committee_folders/_form_bulk_upload.html.haml
205
206
  - app/views/admin/committee_folders/_form_committee_folder.html.haml
206
207
  - app/views/admin/committee_members/_form.html.haml
207
208
  - app/views/admin/committee_members/_form_committee_member.html.haml