Compare commits
5 Commits
API-can-fe
...
big-admin-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ee873a2cbe | ||
|
|
f99d607a69 | ||
|
|
88836e937e | ||
|
|
e3d4d22a34 | ||
|
|
3690268f83 |
6
Gemfile
6
Gemfile
@@ -4,7 +4,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|||||||
ruby "2.6.3"
|
ruby "2.6.3"
|
||||||
|
|
||||||
# Bundle edge Rails instead: gem "rails", github: "rails/rails"
|
# Bundle edge Rails instead: gem "rails", github: "rails/rails"
|
||||||
gem "rails", "~> 6.0.3.1"
|
gem "rails", "~> 6.0.0"
|
||||||
# Use postgresql as the database for Active Record
|
# Use postgresql as the database for Active Record
|
||||||
gem "pg", "~> 0.18"
|
gem "pg", "~> 0.18"
|
||||||
# Use Puma as the app server
|
# Use Puma as the app server
|
||||||
@@ -30,9 +30,9 @@ gem "active_storage_base64", "~> 1.0.0"
|
|||||||
gem "image_processing", "~> 1.2"
|
gem "image_processing", "~> 1.2"
|
||||||
|
|
||||||
# Use Amazon Web Services S3 for file uploads in production
|
# Use Amazon Web Services S3 for file uploads in production
|
||||||
gem "aws-sdk-s3", "~> 1.48", require: false, group: [:production, :review]
|
gem "aws-sdk-s3", "~> 1.31.0", require: false, group: [:production, :review]
|
||||||
# Allow AWS API requests to be signed using IAM credentials
|
# Allow AWS API requests to be signed using IAM credentials
|
||||||
gem "aws-sigv4", "~> 1.1"
|
gem "aws-sigv4", "~> 1.0.2"
|
||||||
|
|
||||||
# Reduces boot times through caching; required in config/boot.rb
|
# Reduces boot times through caching; required in config/boot.rb
|
||||||
gem "bootsnap", ">= 1.1.0", require: false
|
gem "bootsnap", ">= 1.1.0", require: false
|
||||||
|
|||||||
161
Gemfile.lock
161
Gemfile.lock
@@ -44,71 +44,71 @@ GEM
|
|||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
Ascii85 (1.0.3)
|
Ascii85 (1.0.3)
|
||||||
actioncable (6.0.3.2)
|
actioncable (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
websocket-driver (>= 0.6.1)
|
websocket-driver (>= 0.6.1)
|
||||||
actionmailbox (6.0.3.2)
|
actionmailbox (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
activejob (= 6.0.3.2)
|
activejob (= 6.0.0)
|
||||||
activerecord (= 6.0.3.2)
|
activerecord (= 6.0.0)
|
||||||
activestorage (= 6.0.3.2)
|
activestorage (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
mail (>= 2.7.1)
|
mail (>= 2.7.1)
|
||||||
actionmailer (6.0.3.2)
|
actionmailer (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
actionview (= 6.0.3.2)
|
actionview (= 6.0.0)
|
||||||
activejob (= 6.0.3.2)
|
activejob (= 6.0.0)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
actionpack (6.0.3.2)
|
actionpack (6.0.0)
|
||||||
actionview (= 6.0.3.2)
|
actionview (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
rack (~> 2.0, >= 2.0.8)
|
rack (~> 2.0)
|
||||||
rack-test (>= 0.6.3)
|
rack-test (>= 0.6.3)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
||||||
actiontext (6.0.3.2)
|
actiontext (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
activerecord (= 6.0.3.2)
|
activerecord (= 6.0.0)
|
||||||
activestorage (= 6.0.3.2)
|
activestorage (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
nokogiri (>= 1.8.5)
|
nokogiri (>= 1.8.5)
|
||||||
actionview (6.0.3.2)
|
actionview (6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubi (~> 1.4)
|
erubi (~> 1.4)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
||||||
active_storage_base64 (1.0.0)
|
active_storage_base64 (1.0.0)
|
||||||
rails (~> 6.0)
|
rails (~> 6.0)
|
||||||
activejob (6.0.3.2)
|
activejob (6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
globalid (>= 0.3.6)
|
globalid (>= 0.3.6)
|
||||||
activemodel (6.0.3.2)
|
activemodel (6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
activemodel-serializers-xml (1.0.2)
|
activemodel-serializers-xml (1.0.2)
|
||||||
activemodel (> 5.x)
|
activemodel (> 5.x)
|
||||||
activesupport (> 5.x)
|
activesupport (> 5.x)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
activerecord (6.0.3.2)
|
activerecord (6.0.0)
|
||||||
activemodel (= 6.0.3.2)
|
activemodel (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
activeresource (5.1.0)
|
activeresource (5.1.0)
|
||||||
activemodel (>= 5.0, < 7)
|
activemodel (>= 5.0, < 7)
|
||||||
activemodel-serializers-xml (~> 1.0)
|
activemodel-serializers-xml (~> 1.0)
|
||||||
activesupport (>= 5.0, < 7)
|
activesupport (>= 5.0, < 7)
|
||||||
activestorage (6.0.3.2)
|
activestorage (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
activejob (= 6.0.3.2)
|
activejob (= 6.0.0)
|
||||||
activerecord (= 6.0.3.2)
|
activerecord (= 6.0.0)
|
||||||
marcel (~> 0.3.1)
|
marcel (~> 0.3.1)
|
||||||
activesupport (6.0.3.2)
|
activesupport (6.0.0)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
i18n (>= 0.7, < 2)
|
i18n (>= 0.7, < 2)
|
||||||
minitest (~> 5.1)
|
minitest (~> 5.1)
|
||||||
tzinfo (~> 1.1)
|
tzinfo (~> 1.1)
|
||||||
zeitwerk (~> 2.2, >= 2.2.2)
|
zeitwerk (~> 2.1, >= 2.1.8)
|
||||||
addressable (2.7.0)
|
addressable (2.7.0)
|
||||||
public_suffix (>= 2.0.2, < 5.0)
|
public_suffix (>= 2.0.2, < 5.0)
|
||||||
afm (0.2.2)
|
afm (0.2.2)
|
||||||
@@ -117,22 +117,21 @@ GEM
|
|||||||
ast (2.4.0)
|
ast (2.4.0)
|
||||||
autoprefixer-rails (9.7.3)
|
autoprefixer-rails (9.7.3)
|
||||||
execjs
|
execjs
|
||||||
aws-eventstream (1.1.0)
|
aws-eventstream (1.0.3)
|
||||||
aws-partitions (1.337.0)
|
aws-partitions (1.210.0)
|
||||||
aws-sdk-core (3.102.1)
|
aws-sdk-core (3.46.2)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1.0)
|
||||||
aws-partitions (~> 1, >= 1.239.0)
|
aws-partitions (~> 1.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.0)
|
||||||
jmespath (~> 1.0)
|
jmespath (~> 1.0)
|
||||||
aws-sdk-kms (1.35.0)
|
aws-sdk-kms (1.13.0)
|
||||||
aws-sdk-core (~> 3, >= 3.99.0)
|
aws-sdk-core (~> 3, >= 3.39.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.0)
|
||||||
aws-sdk-s3 (1.72.0)
|
aws-sdk-s3 (1.31.0)
|
||||||
aws-sdk-core (~> 3, >= 3.102.1)
|
aws-sdk-core (~> 3, >= 3.39.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.0)
|
||||||
aws-sigv4 (1.2.1)
|
aws-sigv4 (1.0.3)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
|
||||||
axlsx (3.0.0.pre)
|
axlsx (3.0.0.pre)
|
||||||
htmlentities (~> 4.3, >= 4.3.4)
|
htmlentities (~> 4.3, >= 4.3.4)
|
||||||
mimemagic (~> 0.3)
|
mimemagic (~> 0.3)
|
||||||
@@ -182,7 +181,7 @@ GEM
|
|||||||
coffee-script-source
|
coffee-script-source
|
||||||
execjs
|
execjs
|
||||||
coffee-script-source (1.12.2)
|
coffee-script-source (1.12.2)
|
||||||
concurrent-ruby (1.1.6)
|
concurrent-ruby (1.1.5)
|
||||||
connection_pool (2.2.2)
|
connection_pool (2.2.2)
|
||||||
countries (2.1.4)
|
countries (2.1.4)
|
||||||
i18n_data (~> 0.8.0)
|
i18n_data (~> 0.8.0)
|
||||||
@@ -231,7 +230,7 @@ GEM
|
|||||||
hubspot-ruby (0.9.0)
|
hubspot-ruby (0.9.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
httparty (>= 0.10.0)
|
httparty (>= 0.10.0)
|
||||||
i18n (1.8.3)
|
i18n (1.8.2)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
i18n_data (0.8.0)
|
i18n_data (0.8.0)
|
||||||
i18n_yaml_sorter (0.2.0)
|
i18n_yaml_sorter (0.2.0)
|
||||||
@@ -271,22 +270,22 @@ GEM
|
|||||||
ruby_dep (~> 1.2)
|
ruby_dep (~> 1.2)
|
||||||
loaf (0.8.1)
|
loaf (0.8.1)
|
||||||
rails (>= 3.2)
|
rails (>= 3.2)
|
||||||
loofah (2.6.0)
|
loofah (2.4.0)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.5.9)
|
nokogiri (>= 1.5.9)
|
||||||
mail (2.7.1)
|
mail (2.7.1)
|
||||||
mini_mime (>= 0.1.1)
|
mini_mime (>= 0.1.1)
|
||||||
marcel (0.3.3)
|
marcel (0.3.3)
|
||||||
mimemagic (~> 0.3.2)
|
mimemagic (~> 0.3.2)
|
||||||
method_source (1.0.0)
|
method_source (0.9.2)
|
||||||
mime-types (3.3)
|
mime-types (3.3)
|
||||||
mime-types-data (~> 3.2015)
|
mime-types-data (~> 3.2015)
|
||||||
mime-types-data (3.2019.0904)
|
mime-types-data (3.2019.0904)
|
||||||
mimemagic (0.3.5)
|
mimemagic (0.3.3)
|
||||||
mini_magick (4.9.5)
|
mini_magick (4.9.5)
|
||||||
mini_mime (1.0.2)
|
mini_mime (1.0.2)
|
||||||
mini_portile2 (2.4.0)
|
mini_portile2 (2.4.0)
|
||||||
minitest (5.14.1)
|
minitest (5.14.0)
|
||||||
monetize (1.9.2)
|
monetize (1.9.2)
|
||||||
money (~> 6.12)
|
money (~> 6.12)
|
||||||
money (6.13.4)
|
money (6.13.4)
|
||||||
@@ -299,8 +298,8 @@ GEM
|
|||||||
msgpack (1.3.1)
|
msgpack (1.3.1)
|
||||||
multi_xml (0.6.0)
|
multi_xml (0.6.0)
|
||||||
multipart-post (2.1.1)
|
multipart-post (2.1.1)
|
||||||
nio4r (2.5.2)
|
nio4r (2.5.1)
|
||||||
nokogiri (1.10.9)
|
nokogiri (1.10.7)
|
||||||
mini_portile2 (~> 2.4.0)
|
mini_portile2 (~> 2.4.0)
|
||||||
oath (1.1.0)
|
oath (1.1.0)
|
||||||
bcrypt
|
bcrypt
|
||||||
@@ -338,20 +337,20 @@ GEM
|
|||||||
rack
|
rack
|
||||||
rack-test (1.1.0)
|
rack-test (1.1.0)
|
||||||
rack (>= 1.0, < 3)
|
rack (>= 1.0, < 3)
|
||||||
rails (6.0.3.2)
|
rails (6.0.0)
|
||||||
actioncable (= 6.0.3.2)
|
actioncable (= 6.0.0)
|
||||||
actionmailbox (= 6.0.3.2)
|
actionmailbox (= 6.0.0)
|
||||||
actionmailer (= 6.0.3.2)
|
actionmailer (= 6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
actiontext (= 6.0.3.2)
|
actiontext (= 6.0.0)
|
||||||
actionview (= 6.0.3.2)
|
actionview (= 6.0.0)
|
||||||
activejob (= 6.0.3.2)
|
activejob (= 6.0.0)
|
||||||
activemodel (= 6.0.3.2)
|
activemodel (= 6.0.0)
|
||||||
activerecord (= 6.0.3.2)
|
activerecord (= 6.0.0)
|
||||||
activestorage (= 6.0.3.2)
|
activestorage (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
bundler (>= 1.3.0)
|
bundler (>= 1.3.0)
|
||||||
railties (= 6.0.3.2)
|
railties (= 6.0.0)
|
||||||
sprockets-rails (>= 2.0.0)
|
sprockets-rails (>= 2.0.0)
|
||||||
rails-controller-testing (1.0.4)
|
rails-controller-testing (1.0.4)
|
||||||
actionpack (>= 5.0.1.x)
|
actionpack (>= 5.0.1.x)
|
||||||
@@ -364,9 +363,9 @@ GEM
|
|||||||
nokogiri (>= 1.6)
|
nokogiri (>= 1.6)
|
||||||
rails-html-sanitizer (1.3.0)
|
rails-html-sanitizer (1.3.0)
|
||||||
loofah (~> 2.3)
|
loofah (~> 2.3)
|
||||||
railties (6.0.3.2)
|
railties (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
method_source
|
method_source
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (>= 0.20.3, < 2.0)
|
thor (>= 0.20.3, < 2.0)
|
||||||
@@ -470,7 +469,7 @@ GEM
|
|||||||
turbolinks-source (5.2.0)
|
turbolinks-source (5.2.0)
|
||||||
typhoeus (1.3.1)
|
typhoeus (1.3.1)
|
||||||
ethon (>= 0.9.0)
|
ethon (>= 0.9.0)
|
||||||
tzinfo (1.2.7)
|
tzinfo (1.2.6)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
uglifier (4.1.20)
|
uglifier (4.1.20)
|
||||||
execjs (>= 0.3.0, < 3)
|
execjs (>= 0.3.0, < 3)
|
||||||
@@ -495,9 +494,9 @@ GEM
|
|||||||
activesupport (>= 4.2)
|
activesupport (>= 4.2)
|
||||||
rack-proxy (>= 0.6.1)
|
rack-proxy (>= 0.6.1)
|
||||||
railties (>= 4.2)
|
railties (>= 4.2)
|
||||||
websocket-driver (0.7.2)
|
websocket-driver (0.7.1)
|
||||||
websocket-extensions (>= 0.1.0)
|
websocket-extensions (>= 0.1.0)
|
||||||
websocket-extensions (0.1.5)
|
websocket-extensions (0.1.4)
|
||||||
will_paginate (3.2.1)
|
will_paginate (3.2.1)
|
||||||
will_paginate-bootstrap4 (0.2.2)
|
will_paginate-bootstrap4 (0.2.2)
|
||||||
will_paginate (~> 3.0, >= 3.0.0)
|
will_paginate (~> 3.0, >= 3.0.0)
|
||||||
@@ -505,7 +504,7 @@ GEM
|
|||||||
wkhtmltopdf-heroku (2.12.5.0)
|
wkhtmltopdf-heroku (2.12.5.0)
|
||||||
xpath (3.2.0)
|
xpath (3.2.0)
|
||||||
nokogiri (~> 1.8)
|
nokogiri (~> 1.8)
|
||||||
zeitwerk (2.3.1)
|
zeitwerk (2.2.2)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
@@ -515,8 +514,8 @@ DEPENDENCIES
|
|||||||
activeresource (= 5.1.0)
|
activeresource (= 5.1.0)
|
||||||
acts-as-taggable-on!
|
acts-as-taggable-on!
|
||||||
analytics-ruby
|
analytics-ruby
|
||||||
aws-sdk-s3 (~> 1.48)
|
aws-sdk-s3 (~> 1.31.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.0.2)
|
||||||
axlsx (~> 3.0.0.pre)
|
axlsx (~> 3.0.0.pre)
|
||||||
axlsx_rails (~> 0.5.2)
|
axlsx_rails (~> 0.5.2)
|
||||||
axlsx_styler (~> 0.2.0)
|
axlsx_styler (~> 0.2.0)
|
||||||
@@ -562,7 +561,7 @@ DEPENDENCIES
|
|||||||
rack!
|
rack!
|
||||||
rack-contrib (~> 2.0.1)
|
rack-contrib (~> 2.0.1)
|
||||||
rack-cors
|
rack-cors
|
||||||
rails (~> 6.0.3.1)
|
rails (~> 6.0.0)
|
||||||
rails-controller-testing (~> 1.0.4)
|
rails-controller-testing (~> 1.0.4)
|
||||||
rails-data-migrations (~> 1.2.0)
|
rails-data-migrations (~> 1.2.0)
|
||||||
redcarpet (~> 3.4.0)
|
redcarpet (~> 3.4.0)
|
||||||
|
|||||||
16
README.md
16
README.md
@@ -95,28 +95,14 @@ rake i18n:sort
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Zoom.us integration
|
## Zoom.us integration
|
||||||
DirectMe app offers live broadcasting feature. Users are offered to paralelly connect to the Zoom meeting to have a video conference while the streaming happens. In order to use the Zoom functionality, the app needs to have the API and verification token keys provided along with the account number that is available after login into the Zoom account. You need to have Zoom PRO subscription in order to use this feature.
|
DirectMe app offers live broadcasting. Users are offered to paralelly connect to the Zoom meeting to have a video conference while the streaming happens. In order to use the Zoom functionality, the app needs to have the API keys provided. You need Zoom PRO account for this feature.
|
||||||
|
|
||||||
#### Zoom.us api keys
|
#### Zoom.us api keys
|
||||||
1. Log in to you zoom.us account
|
1. Log in to you zoom.us account
|
||||||
2. Go to https://marketplace.zoom.us/develop/create
|
2. Go to https://marketplace.zoom.us/develop/create
|
||||||
3. Choose JWT application
|
3. Choose JWT application
|
||||||
4. Copy API Key and API Secret
|
4. Copy API Key and API Secret
|
||||||
5. Set up ZOOM_API_KEY and ZOOM_API_SECRET environment variables
|
|
||||||
|
|
||||||
#### Setup
|
|
||||||
There is some configuration that has to be done through the API on the Zoom account so that you can use the feature. Run `rails zoom:setup` rake task to do it.
|
|
||||||
|
|
||||||
#### Zoom.us webhooks
|
|
||||||
To ensure integrity in between different Zoom environments, the app uses Zoom webhooks. To set them up, go to https://marketplace.czoom.us -> Develop -> JWT app -> Feature -> Event Subscriptions and enable following hooks:
|
|
||||||
* Start Meeting
|
|
||||||
* End Meeting
|
|
||||||
* All Recordings have completed
|
|
||||||
* User has been created
|
|
||||||
* User had been deleted
|
|
||||||
|
|
||||||
#### Syncing app with Zoom account configuration
|
|
||||||
If you are setting up the app to use Zoom account that has been previously used with DirectME, it is a good idea to make sure that the db state reflects the account situation. To do that, run `rails zoom:sync` rake task.
|
|
||||||
|
|
||||||
## Working Locally
|
## Working Locally
|
||||||
|
|
||||||
|
|||||||
39
app/assets/javascripts/channels/broadcasts.coffee
Normal file
39
app/assets/javascripts/channels/broadcasts.coffee
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
$(document).on "turbolinks:load", ->
|
||||||
|
# Only connect if a broadcast-token meta tag is present
|
||||||
|
broadcast_meta = document.querySelector("meta[name=broadcast-token]")
|
||||||
|
return unless broadcast_meta
|
||||||
|
|
||||||
|
broadcastToken = broadcast_meta.getAttribute("content")
|
||||||
|
|
||||||
|
App.public = App.cable.subscriptions.create { channel: "BroadcastsChannel", token: broadcastToken },
|
||||||
|
connected: ->
|
||||||
|
# Called when the subscription is ready for use on the server
|
||||||
|
|
||||||
|
disconnected: ->
|
||||||
|
# Called when the subscription has been terminated by the server
|
||||||
|
|
||||||
|
received: (data) ->
|
||||||
|
return unless document.querySelector("meta[name=broadcast-token][content='#{broadcastToken}']")
|
||||||
|
switch data.event
|
||||||
|
when "broadcast_stream_update" then @refreshBroadcastVideo(data)
|
||||||
|
when "stream_recording_ready" then @showBroadcastRecordings(data)
|
||||||
|
|
||||||
|
refreshBroadcastVideo: (data) ->
|
||||||
|
$("#broadcast_updates").html data.status_content
|
||||||
|
if data.streamer_status == 'recording' && data.status == 'active'
|
||||||
|
$("#broadcast_video").html data.video_content
|
||||||
|
new (Clappr.Player)(
|
||||||
|
parentId: '#broadcast_video'
|
||||||
|
source: data.playback_url
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
mute: true,
|
||||||
|
autoPlay: true,
|
||||||
|
hlsMinimumDvrSize: 1)
|
||||||
|
if data.streamer_status == "idle" && data.status == "idle"
|
||||||
|
$("#broadcast_video").html data.video_content
|
||||||
|
|
||||||
|
showBroadcastRecordings: (data) ->
|
||||||
|
$(".flash-message").html data.flash_content
|
||||||
|
$("#broadcast_recordings").html data.recordings_content
|
||||||
|
$("#broadcast_recordings_nav").html data.recordings_nav_content
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
$(document).on "turbolinks:load", ->
|
|
||||||
subscribeToBroadcast = (broadcastToken) -> App.cable.subscriptions.create { channel: "BroadcastsChannel", token: broadcastToken },
|
|
||||||
connected: ->
|
|
||||||
# Called when the subscription is ready for use on the server
|
|
||||||
console.info "Subscribed to channel for broadcast:#{broadcastToken}"
|
|
||||||
|
|
||||||
disconnected: ->
|
|
||||||
# Called when the subscription has been terminated by the server
|
|
||||||
|
|
||||||
received: (data) ->
|
|
||||||
switch data.event
|
|
||||||
when "broadcast_stream_update"
|
|
||||||
return unless document.querySelector("meta[name=broadcast-token][current=true][content='#{broadcastToken}']")
|
|
||||||
@refreshBroadcastVideo(data)
|
|
||||||
when "stream_recording_ready"
|
|
||||||
return unless document.querySelector("meta[name=broadcast-token][current=true][content='#{broadcastToken}']")
|
|
||||||
@showBroadcastRecordings(data)
|
|
||||||
when "file_upload_update"
|
|
||||||
return unless document.querySelector("meta[name=broadcast-token][content='#{broadcastToken}']")
|
|
||||||
@refreshBroadcastFilesTab(data)
|
|
||||||
|
|
||||||
refreshBroadcastVideo: (data) ->
|
|
||||||
$("#broadcast_updates").html data.status_content
|
|
||||||
stream_selected = $("#broadcast_video").data('videoType') == 'stream';
|
|
||||||
if data.streamer_status == 'recording' && data.status == 'active' && stream_selected
|
|
||||||
$("#broadcast_video").html data.video_content
|
|
||||||
new (Clappr.Player)(
|
|
||||||
<%= "baseUrl: 'http://cdn.clappr.io/latest'," if Rails.env.test? %>
|
|
||||||
parentId: '#broadcast_video'
|
|
||||||
source: data.full_live_stream_playback_url
|
|
||||||
width: '100%',
|
|
||||||
height: '100%',
|
|
||||||
mute: true,
|
|
||||||
autoPlay: true,
|
|
||||||
hlsMinimumDvrSize: 1)
|
|
||||||
if data.streamer_status == "idle" && data.status == "idle"
|
|
||||||
$("#broadcast_video").html data.video_content
|
|
||||||
|
|
||||||
showBroadcastRecordings: (data) ->
|
|
||||||
$(".flash-message").html data.flash_content
|
|
||||||
$("#broadcast_recordings").html data.recordings_content
|
|
||||||
$("#broadcast_recordings_nav").html data.recordings_nav_content
|
|
||||||
|
|
||||||
refreshBroadcastFilesTab: (data) ->
|
|
||||||
$("#broadcast_file_list_#{data.broadcast_token}").html data.files_content
|
|
||||||
$("#broadcast_files_pagination_#{data.broadcast_token}").html data.pagination_content
|
|
||||||
|
|
||||||
# Create a channel subscription for every broadcast included in the meta tags
|
|
||||||
get_token = (meta) -> meta.getAttribute("content")
|
|
||||||
broadcast_tokens = (get_token broadcast_meta for broadcast_meta in document.querySelectorAll("meta[name=broadcast-token]"))
|
|
||||||
subscribeToBroadcast token for token in broadcast_tokens
|
|
||||||
@@ -16,7 +16,6 @@ $(document).on "turbolinks:load", ->
|
|||||||
switch data.event
|
switch data.event
|
||||||
when "video_status_update" then @showVideoStatusUpdate(data.content)
|
when "video_status_update" then @showVideoStatusUpdate(data.content)
|
||||||
when "download_status_update" then @showDownloadStatusUpdate(data.content)
|
when "download_status_update" then @showDownloadStatusUpdate(data.content)
|
||||||
when "conference_recording_ready" then @showDownloadStatusUpdate(data.content)
|
|
||||||
|
|
||||||
showVideoStatusUpdate: (content) ->
|
showVideoStatusUpdate: (content) ->
|
||||||
$("[data-ujs-target='video-analysis-msg']").replaceWith content
|
$("[data-ujs-target='video-analysis-msg']").replaceWith content
|
||||||
|
|||||||
@@ -1,16 +1,11 @@
|
|||||||
$(document).on("change", "[data-toggle=collapse-select]", function(event) {
|
$(document).on("change", "[data-toggle=collapse-select]", function(event) {
|
||||||
const select = event.target;
|
const select = event.target;
|
||||||
const mappings = JSON.parse(select.dataset.targetShowValuesMapping);
|
const target = select.dataset.target;
|
||||||
|
const showValues = JSON.parse(select.dataset.showValues);
|
||||||
|
|
||||||
$.each(mappings, function( key, value ) {
|
if (showValues.indexOf(select.value) > -1) {
|
||||||
if (value.indexOf(select.value) > -1) {
|
$(target).show("fast");
|
||||||
$(key).show("fast");
|
} else {
|
||||||
} else {
|
$(target).hide("fast");
|
||||||
$(key).hide("fast");
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).on("turbolinks:load", function() {
|
|
||||||
$("[data-toggle=collapse-select]").trigger("change");
|
|
||||||
});
|
});
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
$(document).on("turbolinks:load", function() {
|
|
||||||
$("#upload_directory_files").on('click', function(e){
|
|
||||||
const newFilesCount = $('input[name = "directory[files][]"][type = "hidden"]').length;
|
|
||||||
|
|
||||||
if (newFilesCount === 0){
|
|
||||||
e.preventDefault();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
$(document).on("click", "[data-behavior=select_contract_template]", function() {
|
|
||||||
var _this = this;
|
|
||||||
var checkbox = $(this).children("input:checkbox");
|
|
||||||
|
|
||||||
selectContractTemplate(_this, checkbox);
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).on("click", "[data-behavior=select_contract_template] input[type='checkbox']", function(e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
|
|
||||||
var _this = this;
|
|
||||||
var checkbox = $(this);
|
|
||||||
|
|
||||||
selectContractTemplate(_this, checkbox);
|
|
||||||
});
|
|
||||||
|
|
||||||
function selectContractTemplate(clicked_element, checkbox) {
|
|
||||||
if (clicked_element.hasChildNodes()) {
|
|
||||||
if(checkbox.prop("checked")) {
|
|
||||||
checkbox.prop('checked', false);
|
|
||||||
} else {
|
|
||||||
checkbox.prop('checked', true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var checked = checkbox.prop("checked");
|
|
||||||
var project_id = JSON.parse($('#group_qr_code').attr('data-project-id'));
|
|
||||||
var contract_template_ids = JSON.parse($('#group_qr_code').attr('data-contract-template-ids'));
|
|
||||||
var selected_contract_template_id = checkbox.val();
|
|
||||||
|
|
||||||
if (checked && !contract_template_ids.includes(selected_contract_template_id)) {
|
|
||||||
contract_template_ids.push(selected_contract_template_id);
|
|
||||||
} else if(!checked && contract_template_ids.includes(selected_contract_template_id)) {
|
|
||||||
contract_template_ids.splice( $.inArray(selected_contract_template_id, contract_template_ids), 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#group_qr_code').attr('data-contract-template-ids', JSON.stringify(contract_template_ids));
|
|
||||||
|
|
||||||
if (contract_template_ids.length >= 2) {
|
|
||||||
multi_sign_ids = $.param({multi_sign_ids: contract_template_ids});
|
|
||||||
contract_template_url = "/en/contract_templates/" + contract_template_ids[0] + "/qr_codes?" + multi_sign_ids
|
|
||||||
|
|
||||||
$("#group_qr_code").attr("href", contract_template_url);
|
|
||||||
$("#group_qr_code").attr("target", "_blank");
|
|
||||||
$("#group_qr_code").removeClass('disabled');
|
|
||||||
} else if (contract_template_ids.length < 2) {
|
|
||||||
$("#group_qr_code").attr("href", "javascript:void(0);");
|
|
||||||
$("#group_qr_code").addClass('disabled');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -51,8 +51,10 @@ $(document).on("turbolinks:load", function() {
|
|||||||
$("[data-behavior=guardian-photo-preview]").each(function(index, element) {
|
$("[data-behavior=guardian-photo-preview]").each(function(index, element) {
|
||||||
App.PhotoPreview.init(element);
|
App.PhotoPreview.init(element);
|
||||||
});
|
});
|
||||||
$("[data-behavior=trigger-click]").click(function(e) {
|
$("[data-behavior=take-person-photo]").click(function(e) {
|
||||||
const target = $(this).data("target");
|
$("[data-ujs-target=person-photo-input]").trigger("click");
|
||||||
$(target).trigger("click");
|
});
|
||||||
|
$("[data-behavior=take-guardian-photo]").click(function(e) {
|
||||||
|
$("[data-ujs-target=guardian-photo-input]").trigger("click");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
24
app/assets/javascripts/play_previous_recordings.js
Normal file
24
app/assets/javascripts/play_previous_recordings.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
$(document).on("click", "[data-behavior=play_recording]", function() {
|
||||||
|
if ($(this).hasClass('active')){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var playback_url = $(this).attr("data-playback-url")
|
||||||
|
$("#broadcast_video").empty();
|
||||||
|
|
||||||
|
new Clappr.Player({
|
||||||
|
parentId: '#broadcast_video',
|
||||||
|
source: playback_url,
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
autoPlay: true
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".dropdown-menu").children().removeClass('active');
|
||||||
|
$(".dropdown-menu").children().children('i').remove();
|
||||||
|
$(this).siblings().removeClass('active');
|
||||||
|
$(this).siblings().children("i").remove();
|
||||||
|
$(this).addClass('active');
|
||||||
|
$(this).prepend('<i class="fa fa-check"> </i>');
|
||||||
|
});
|
||||||
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
$(document).on("click", "[data-behavior=play_recording]", function() {
|
|
||||||
if ($(this).hasClass('active')){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$("#broadcast_video").data('videoType', 'recording');
|
|
||||||
|
|
||||||
var playback_url = $(this).attr("data-playback-url")
|
|
||||||
$("#broadcast_video").empty();
|
|
||||||
|
|
||||||
new Clappr.Player({
|
|
||||||
<%= "baseUrl: 'http://cdn.clappr.io/latest'," if Rails.env.test? %>
|
|
||||||
parentId: '#broadcast_video',
|
|
||||||
source: playback_url,
|
|
||||||
width: '100%',
|
|
||||||
height: '100%',
|
|
||||||
autoPlay: true
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".dropdown-menu").children().removeClass('active');
|
|
||||||
$(".dropdown-menu").children().children('i').remove();
|
|
||||||
$(this).siblings().removeClass('active');
|
|
||||||
$(this).siblings().children("i").remove();
|
|
||||||
$(this).addClass('active');
|
|
||||||
$(this).prepend('<i class="fa fa-check"> </i>');
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).on("click", "[data-behavior=play_stream]", function() { $("#broadcast_video").data('videoType', 'stream'); });
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
$(document).on("turbolinks:load", function() {
|
|
||||||
$("[data-behavior=update-required-status]").click(function(e) {
|
|
||||||
const required = !!($(this)[0] && $(this)[0].checked);
|
|
||||||
|
|
||||||
|
|
||||||
$("[data-required-tag=guardian]").each(function(index, element) {
|
|
||||||
const labelForField = element.previousSibling;
|
|
||||||
|
|
||||||
element.required = required;
|
|
||||||
labelForField.classList.add("required");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -14,7 +14,6 @@ $red: #F9002B;
|
|||||||
$green: #51B61B;
|
$green: #51B61B;
|
||||||
$teal: #32C498;
|
$teal: #32C498;
|
||||||
$purple: #5139EE;
|
$purple: #5139EE;
|
||||||
$yellow: #F9BE1B;
|
|
||||||
$dark: $gray-900;
|
$dark: $gray-900;
|
||||||
$success: $teal;
|
$success: $teal;
|
||||||
$link-color: $body-color;
|
$link-color: $body-color;
|
||||||
|
|||||||
@@ -6,11 +6,6 @@
|
|||||||
@import "dropzone/dist/dropzone";
|
@import "dropzone/dist/dropzone";
|
||||||
@import 'bootstrap-datepicker';
|
@import 'bootstrap-datepicker';
|
||||||
|
|
||||||
// Global styles
|
|
||||||
label {
|
|
||||||
text-transform: capitalize;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wordmarks
|
// Wordmarks
|
||||||
.suite-wordmark {
|
.suite-wordmark {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
@@ -37,14 +32,14 @@ label {
|
|||||||
&.release-me {
|
&.release-me {
|
||||||
span:last-child {
|
span:last-child {
|
||||||
background-color: $teal;
|
background-color: $teal;
|
||||||
color: $white;
|
color: $body-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.direct-me {
|
&.direct-me {
|
||||||
span:last-child {
|
span:last-child {
|
||||||
background-color: $green;
|
background-color: $green;
|
||||||
color: $white;
|
color: $body-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,14 +53,7 @@ label {
|
|||||||
&.deliver-me {
|
&.deliver-me {
|
||||||
span:last-child {
|
span:last-child {
|
||||||
background-color: $purple;
|
background-color: $purple;
|
||||||
color: $white;
|
color: white;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.task-me {
|
|
||||||
span:last-child {
|
|
||||||
background-color: $yellow;
|
|
||||||
color: $white;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,14 +44,6 @@ u {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.qr-code {
|
|
||||||
margin-right: -30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.do-not-copy-warning {
|
|
||||||
padding-right: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.heading-table td {
|
.heading-table td {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ class BroadcastsChannel < ApplicationCable::Channel
|
|||||||
event: :broadcast_stream_update,
|
event: :broadcast_stream_update,
|
||||||
status: broadcast.status,
|
status: broadcast.status,
|
||||||
playback_url: broadcast.stream_playback_url,
|
playback_url: broadcast.stream_playback_url,
|
||||||
full_live_stream_playback_url: broadcast.full_live_stream_playback_url,
|
|
||||||
video_content: video_content,
|
video_content: video_content,
|
||||||
status_content: status_content,
|
status_content: status_content,
|
||||||
streamer_status: broadcast.streamer_status
|
streamer_status: broadcast.streamer_status
|
||||||
@@ -35,15 +34,4 @@ class BroadcastsChannel < ApplicationCable::Channel
|
|||||||
recordings_content: recordings_content,
|
recordings_content: recordings_content,
|
||||||
recordings_nav_content: recordings_nav_content
|
recordings_nav_content: recordings_nav_content
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.broadcast_file_upload_updates(broadcast, files, pagination_content)
|
|
||||||
files_content = ApplicationController.render partial: "broadcasts/file", collection: files
|
|
||||||
|
|
||||||
broadcast_to broadcast, {
|
|
||||||
event: :file_upload_update,
|
|
||||||
broadcast_token: broadcast.token,
|
|
||||||
files_content: files_content,
|
|
||||||
pagination_content: pagination_content
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -25,12 +25,4 @@ class ProjectsChannel < ApplicationCable::Channel
|
|||||||
content = ApplicationController.render partial: "application/flash", locals: { flash: flash }
|
content = ApplicationController.render partial: "application/flash", locals: { flash: flash }
|
||||||
broadcast_to download.project, event: :download_status_update, content: content
|
broadcast_to download.project, event: :download_status_update, content: content
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.conference_recording_ready(project, recording)
|
|
||||||
link = ApplicationController.helpers.link_to('Download here.', recording.service_url, target: '_blank', class: 'alert-link')
|
|
||||||
notification = "A recording of your video conference is now available. #{link}"
|
|
||||||
flash = OpenStruct.new(notice: notification)
|
|
||||||
content = ApplicationController.render partial: 'application/flash', locals: { flash: flash }
|
|
||||||
broadcast_to project, event: :conference_recording_ready, content: content
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class AccountsController < ApplicationController
|
|||||||
|
|
||||||
if sign_in(user)
|
if sign_in(user)
|
||||||
TrackAnalyticsJob.perform_later(user, user.primary_account, :track_guest_sign_up, user_agent: request.user_agent, user_ip: request.remote_ip)
|
TrackAnalyticsJob.perform_later(user, user.primary_account, :track_guest_sign_up, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||||
SubmitHubspotFormJob.perform_later(user.first_name, user.last_name, user.email, account.name, i_m_interested_in: user.interested_product_name)
|
SubmitHubspotFormJob.perform_later(user.email, account.name, i_m_interested_in: user.interested_product_name)
|
||||||
redirect_to signed_in_root_path
|
redirect_to signed_in_root_path
|
||||||
else
|
else
|
||||||
redirect_to new_session_path, alert: t(".notice")
|
redirect_to new_session_path, alert: t(".notice")
|
||||||
|
|||||||
@@ -56,74 +56,34 @@ class AcquiredMediaReleasesController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_company
|
|
||||||
person_email
|
|
||||||
person_title
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def acquired_media_release_params
|
def acquired_media_release_params
|
||||||
params.require(:acquired_media_release).permit(person_params,
|
params.require(:acquired_media_release).permit(
|
||||||
guardian_params,
|
:name,
|
||||||
second_guardian_params,
|
:territory,
|
||||||
:minor,
|
:term,
|
||||||
:name,
|
:person_name,
|
||||||
:territory,
|
:person_phone,
|
||||||
:term,
|
:person_email,
|
||||||
:contract,
|
:person_company,
|
||||||
:applicable_medium_id, :applicable_medium_text,
|
:person_title,
|
||||||
:territory_id, :territory_text,
|
:person_address_street1,
|
||||||
:term_id, :term_text,
|
:person_address_street2,
|
||||||
:restriction_id, :restriction_text,
|
:person_address_city,
|
||||||
categories: [],
|
:person_address_state,
|
||||||
file_infos_attributes: %i[
|
:person_address_zip,
|
||||||
filename
|
:person_address_country,
|
||||||
content_type
|
:contract,
|
||||||
byte_size
|
:applicable_medium_id, :applicable_medium_text,
|
||||||
])
|
:territory_id, :territory_text,
|
||||||
|
:term_id, :term_text,
|
||||||
|
:restriction_id, :restriction_text,
|
||||||
|
categories: [],
|
||||||
|
file_infos_attributes: [
|
||||||
|
:filename,
|
||||||
|
:content_type,
|
||||||
|
:byte_size
|
||||||
|
]
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_acquired_media_release(attrs = {})
|
def build_acquired_media_release(attrs = {})
|
||||||
|
|||||||
@@ -8,10 +8,6 @@ class Admin::TaskRequestsController < Admin::ApplicationController
|
|||||||
def edit
|
def edit
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
|
||||||
@files = @task_request.files.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
def update
|
||||||
if @task_request.update(task_request_params)
|
if @task_request.update(task_request_params)
|
||||||
redirect_to [:admin, :task_requests], notice: t(".notice")
|
redirect_to [:admin, :task_requests], notice: t(".notice")
|
||||||
|
|||||||
@@ -17,9 +17,7 @@ class Api::ApiController < ActionController::Base
|
|||||||
def return_error(exception)
|
def return_error(exception)
|
||||||
raise exception if Rails.env.test?
|
raise exception if Rails.env.test?
|
||||||
|
|
||||||
Raven.capture_exception(exception)
|
logger.error "==Handled======="
|
||||||
|
|
||||||
logger.error "==Handled======"
|
|
||||||
logger.error exception.message
|
logger.error exception.message
|
||||||
logger.error exception.backtrace.join("\n")
|
logger.error exception.backtrace.join("\n")
|
||||||
logger.error "==Handled======="
|
logger.error "==Handled======="
|
||||||
|
|||||||
@@ -19,11 +19,5 @@ class Api::AppearanceReleasesController < Api::ReleasesController
|
|||||||
guardian_photo[:io] = StringIO.new(Base64.decode64(guardian_photo[:io]))
|
guardian_photo[:io] = StringIO.new(Base64.decode64(guardian_photo[:io]))
|
||||||
release.guardian_photo.attach(io: guardian_photo[:io], filename: guardian_photo[:filename])
|
release.guardian_photo.attach(io: guardian_photo[:io], filename: guardian_photo[:filename])
|
||||||
end
|
end
|
||||||
|
|
||||||
guardian_2_photo = release_create_params[:guardian_2_photo]
|
|
||||||
if guardian_2_photo
|
|
||||||
guardian_2_photo[:io] = StringIO.new(Base64.decode64(guardian_2_photo[:io]))
|
|
||||||
release.guardian_2_photo.attach(io: guardian_2_photo[:io], filename: guardian_2_photo[:filename])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -24,12 +24,8 @@ class Api::BroadcastsController < Api::ApiController
|
|||||||
|
|
||||||
def update
|
def update
|
||||||
file_params.each do |file|
|
file_params.each do |file|
|
||||||
if file.is_a?(String)
|
file[:io] = StringIO.new(Base64.decode64(file[:io]))
|
||||||
@broadcast.files.attach(file)
|
@broadcast.files.attach(io: file[:io], filename: file[:filename])
|
||||||
else
|
|
||||||
file[:io] = StringIO.new(Base64.decode64(file[:io]))
|
|
||||||
@broadcast.files.attach(file.to_h.symbolize_keys)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
@broadcast.save!
|
@broadcast.save!
|
||||||
|
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
# Duplicated from ActiveStorage::DirectUploadsController
|
|
||||||
# https://github.com/rails/rails/blob/v6.0.0/activestorage/app/controllers/active_storage/direct_uploads_controller.rb
|
|
||||||
class Api::DirectUploadsController < Api::ApiController
|
|
||||||
include ActiveStorage::SetCurrent
|
|
||||||
|
|
||||||
deserializable_resource :direct_upload, only: [:create]
|
|
||||||
|
|
||||||
def create
|
|
||||||
blob = ActiveStorage::Blob.create_before_direct_upload!(blob_params)
|
|
||||||
render jsonapi: DirectUpload.new(blob)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def blob_params
|
|
||||||
params.
|
|
||||||
require(:direct_upload).
|
|
||||||
permit(:type, :filename, :byte_size, :checksum, :content_type, :metadata).
|
|
||||||
except(:type).
|
|
||||||
to_h.symbolize_keys
|
|
||||||
end
|
|
||||||
|
|
||||||
class DeserializableDirectUpload < JSONAPI::Deserializable::Resource
|
|
||||||
attributes :filename, :byte_size, :checksum, :content_type, :metadata
|
|
||||||
end
|
|
||||||
|
|
||||||
class SerializableDirectUpload < JSONAPI::Serializable::Resource
|
|
||||||
type 'direct_upload'
|
|
||||||
|
|
||||||
attributes :id, :key, :signed_id, :url, :headers
|
|
||||||
end
|
|
||||||
|
|
||||||
class DirectUpload
|
|
||||||
delegate :id, :key, :signed_id, to: :blob
|
|
||||||
|
|
||||||
attr_reader :blob
|
|
||||||
|
|
||||||
def initialize(blob)
|
|
||||||
@blob = blob
|
|
||||||
end
|
|
||||||
|
|
||||||
def url
|
|
||||||
blob.service_url_for_direct_upload
|
|
||||||
end
|
|
||||||
|
|
||||||
def headers
|
|
||||||
blob.service_headers_for_direct_upload
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
class Api::MedicalReleasesController < Api::ReleasesController
|
|
||||||
deserializable_resource :medical_release, only: [:create, :update]
|
|
||||||
|
|
||||||
def model_name
|
|
||||||
"medical_release"
|
|
||||||
end
|
|
||||||
|
|
||||||
def attributes_for_index
|
|
||||||
[:name]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
class Api::MiscReleasesController < Api::ReleasesController
|
|
||||||
deserializable_resource :misc_release, only: [:create, :update]
|
|
||||||
|
|
||||||
def model_name
|
|
||||||
"misc_release"
|
|
||||||
end
|
|
||||||
|
|
||||||
def attributes_for_index
|
|
||||||
[:name]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -103,16 +103,10 @@ class Api::ReleasesController < Api::ApiController
|
|||||||
if ["appearance_release", "talent_release"].include?(name)
|
if ["appearance_release", "talent_release"].include?(name)
|
||||||
has_many :guardian_photos do
|
has_many :guardian_photos do
|
||||||
data do
|
data do
|
||||||
[
|
[@object.guardian_photo.try(:attachment)].compact
|
||||||
@object.guardian_photo.try(:attachment),
|
|
||||||
@object.guardian_2_photo.try(:attachment)
|
|
||||||
].compact
|
|
||||||
end
|
end
|
||||||
meta do
|
meta do
|
||||||
{ count:
|
{ count: @object.try(:guardian_photo).try(:attached?) ? 1 : 0 }
|
||||||
(@object.try(:guardian_photo).try(:attached?) ? 1 : 0) +
|
|
||||||
(@object.try(:guardian_2_photo).try(:attached?) ? 1 : 0)
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -176,7 +170,7 @@ class Api::ReleasesController < Api::ApiController
|
|||||||
|
|
||||||
def release_create_params
|
def release_create_params
|
||||||
parameters = params.require(model_name).permit!
|
parameters = params.require(model_name).permit!
|
||||||
keys = model_constant.new.attributes.keys + [:guardian_photo, :guardian_2_photo, :person_photo, :photos, :signature, :signature_base64, :file_infos_attributes]
|
keys = model_constant.new.attributes.keys + [:guardian_photo, :person_photo, :photos, :signature, :signature_base64, :file_infos_attributes]
|
||||||
parameters[:signature_base64] = parameters[:signature]
|
parameters[:signature_base64] = parameters[:signature]
|
||||||
parameters = parameters.slice(*keys).except(:created_at, :updated_at, :id, :user_id, :signature)
|
parameters = parameters.slice(*keys).except(:created_at, :updated_at, :id, :user_id, :signature)
|
||||||
parameters
|
parameters
|
||||||
|
|||||||
@@ -10,10 +10,8 @@ class Api::SyncController < Api::ApiController
|
|||||||
@appearance_releases = (AppearanceRelease.where(project: accessible_projects))
|
@appearance_releases = (AppearanceRelease.where(project: accessible_projects))
|
||||||
@location_releases = (LocationRelease.where(project: accessible_projects))
|
@location_releases = (LocationRelease.where(project: accessible_projects))
|
||||||
@material_releases = (MaterialRelease.where(project: accessible_projects))
|
@material_releases = (MaterialRelease.where(project: accessible_projects))
|
||||||
@medical_releases = MedicalRelease.where(project: accessible_projects)
|
|
||||||
@misc_releases = MiscRelease.where(project: accessible_projects)
|
|
||||||
@talent_releases = (TalentRelease.where(project: accessible_projects))
|
@talent_releases = (TalentRelease.where(project: accessible_projects))
|
||||||
@notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @medical_releases + @misc_releases + @talent_releases + @acquired_media_releases ))
|
@notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @talent_releases + @acquired_media_releases ))
|
||||||
|
|
||||||
render json: {
|
render json: {
|
||||||
data: {
|
data: {
|
||||||
@@ -24,8 +22,6 @@ class Api::SyncController < Api::ApiController
|
|||||||
appearance_releases: releases_query(@appearance_releases),
|
appearance_releases: releases_query(@appearance_releases),
|
||||||
location_releases: releases_query(@location_releases),
|
location_releases: releases_query(@location_releases),
|
||||||
material_releases: releases_query(@material_releases),
|
material_releases: releases_query(@material_releases),
|
||||||
medical_releases: releases_query(@medical_releases),
|
|
||||||
misc_releases: releases_query(@misc_releases),
|
|
||||||
talent_releases: releases_query(@talent_releases),
|
talent_releases: releases_query(@talent_releases),
|
||||||
notes: @notes
|
notes: @notes
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,5 @@ class Api::TalentReleasesController < Api::ReleasesController
|
|||||||
guardian_photo[:io] = StringIO.new(Base64.decode64(guardian_photo[:io]))
|
guardian_photo[:io] = StringIO.new(Base64.decode64(guardian_photo[:io]))
|
||||||
release.guardian_photo.attach(io: guardian_photo[:io], filename: guardian_photo[:filename])
|
release.guardian_photo.attach(io: guardian_photo[:io], filename: guardian_photo[:filename])
|
||||||
end
|
end
|
||||||
|
|
||||||
guardian_2_photo = release_create_params[:guardian_2_photo]
|
|
||||||
if guardian_2_photo
|
|
||||||
guardian_2_photo[:io] = StringIO.new(Base64.decode64(guardian_2_photo[:io]))
|
|
||||||
release.guardian_2_photo.attach(io: guardian_2_photo[:io], filename: guardian_2_photo[:filename])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,19 +1,10 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require './lib/knock_monkeypatch'
|
|
||||||
|
|
||||||
class Api::UserTokenController < Knock::AuthTokenController
|
class Api::UserTokenController < Knock::AuthTokenController
|
||||||
include Oath::ControllerHelpers
|
|
||||||
|
|
||||||
skip_before_action :verify_authenticity_token
|
skip_before_action :verify_authenticity_token
|
||||||
before_action :sign_in_user
|
|
||||||
|
|
||||||
rescue_from Exception, :with => :return_error
|
rescue_from Exception, :with => :return_error
|
||||||
|
|
||||||
# Catch exception and return JSON-formatted error
|
# Catch exception and return JSON-formatted error
|
||||||
def return_error(exception)
|
def return_error(exception)
|
||||||
Raven.capture_exception(exception)
|
|
||||||
|
|
||||||
logger.error "==Handled======="
|
logger.error "==Handled======="
|
||||||
logger.error exception.message
|
logger.error exception.message
|
||||||
logger.error exception.backtrace.join("\n")
|
logger.error exception.backtrace.join("\n")
|
||||||
@@ -42,10 +33,4 @@ class Api::UserTokenController < Knock::AuthTokenController
|
|||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def sign_in_user
|
|
||||||
sign_in(entity)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
class AppearanceReleaseImportsController < ApplicationController
|
class AppearanceReleaseImportsController < ApplicationController
|
||||||
include AppearanceReleaseContext
|
include AppearanceReleaseContext
|
||||||
include ProjectContext
|
include ProjectContext
|
||||||
|
include CreateReleasableJobs
|
||||||
|
|
||||||
before_action :set_project, only: [:create]
|
before_action :set_project, only: [:create]
|
||||||
|
|
||||||
@@ -10,16 +11,24 @@ class AppearanceReleaseImportsController < ApplicationController
|
|||||||
|
|
||||||
def create
|
def create
|
||||||
authorize AppearanceRelease
|
authorize AppearanceRelease
|
||||||
|
@failed_files = []
|
||||||
attachments = appearance_release_params
|
attachments = appearance_release_params
|
||||||
|
|
||||||
if attachments.nil?
|
if attachments.nil?
|
||||||
alert_message = t 'appearance_releases.create.no_attachments'
|
alert_message = t 'appearance_releases.create.no_attachments'
|
||||||
redirect_to [@project, :appearance_releases], alert: alert_message
|
|
||||||
else
|
else
|
||||||
MatchAppearanceReleasesJob.perform_later(@project, attachments)
|
attachments.each do |attachment|
|
||||||
notice_message = t 'appearance_releases.create.matching_started'
|
create_imported_appearance_release attachment
|
||||||
redirect_to [@project, :appearance_releases], notice: notice_message
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unless @failed_files.empty?
|
||||||
|
alert_message = t 'appearance_releases.create.failed_import'
|
||||||
|
alert_message += '<br><ul>'
|
||||||
|
@failed_files.each { |file_name| alert_message += "<li>#{file_name}</li>" }
|
||||||
|
alert_message += '</ul>'
|
||||||
|
end
|
||||||
|
|
||||||
|
redirect_to [@project, :appearance_releases], alert: alert_message
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@@ -36,7 +45,45 @@ class AppearanceReleaseImportsController < ApplicationController
|
|||||||
params.require(:attachments)
|
params.require(:attachments)
|
||||||
end
|
end
|
||||||
|
|
||||||
def acceptable_extensions
|
def build_appearance_release(params = {})
|
||||||
AppearanceRelease.acceptable_import_file_extensions
|
authorize appearance_releases.build(params)
|
||||||
|
end
|
||||||
|
|
||||||
|
def log_create_analytics
|
||||||
|
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_non_native_release, release_type: AppearanceRelease.to_s, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_imported_appearance_release(attachment)
|
||||||
|
blob = ActiveStorage::Blob.find_signed(attachment)
|
||||||
|
return if blob.nil?
|
||||||
|
|
||||||
|
extension = blob.filename.extension_with_delimiter
|
||||||
|
unless AppearanceRelease.acceptable_import_file_extensions.include? extension
|
||||||
|
blob.purge
|
||||||
|
@failed_files << blob.filename
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
random_contract_no = AppearanceRelease.random_contract_number.to_s
|
||||||
|
appearance_release_params = {
|
||||||
|
person_last_name: random_contract_no
|
||||||
|
}
|
||||||
|
|
||||||
|
if blob.image?
|
||||||
|
appearance_release_params[:person_photo] = attachment
|
||||||
|
appearance_release_params[:person_first_name] = I18n.t('appearance_releases.shared.imported_appearance_release_headshot_name')
|
||||||
|
elsif extension == '.pdf'
|
||||||
|
appearance_release_params[:contract] = attachment
|
||||||
|
appearance_release_params[:person_first_name] = I18n.t('appearance_releases.shared.imported_appearance_release_contract_name')
|
||||||
|
end
|
||||||
|
|
||||||
|
appearance_release = build_appearance_release(appearance_release_params)
|
||||||
|
|
||||||
|
if appearance_release.save(context: :non_native)
|
||||||
|
log_create_analytics
|
||||||
|
after_create appearance_release
|
||||||
|
else
|
||||||
|
@failed_files << blob.filename
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -77,43 +77,9 @@ class AppearanceReleasesController < ApplicationController
|
|||||||
results
|
results
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_email
|
|
||||||
person_photo
|
|
||||||
person_address_street1
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def appearance_release_params
|
def appearance_release_params
|
||||||
params.require(:appearance_release).permit(person_params,
|
params.require(:appearance_release).permit(:contract, :guardian_address, :guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_photo, :minor,
|
||||||
guardian_params, second_guardian_params,
|
:person_address, :person_first_name, :person_last_name, :person_phone, :person_email, :person_photo,
|
||||||
:contract, :minor,
|
|
||||||
:applicable_medium_id, :applicable_medium_text,
|
:applicable_medium_id, :applicable_medium_text,
|
||||||
:territory_id, :territory_text,
|
:territory_id, :territory_text,
|
||||||
:term_id, :term_text, :person_date_of_birth,
|
:term_id, :term_text, :person_date_of_birth,
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
class ApprovalsController < ApplicationController
|
|
||||||
before_action :set_releasable
|
|
||||||
before_action :set_project
|
|
||||||
|
|
||||||
layout "project"
|
|
||||||
|
|
||||||
def create
|
|
||||||
@releasable.approve_by(current_user)
|
|
||||||
|
|
||||||
if @releasable.save
|
|
||||||
redirect_to [@project, "#{@releasable_param.name.pluralize}"], notice: t('.release_approved', release_type: @releasable.model_name.human)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def releasable_param
|
|
||||||
@releasable_param ||= ReleasableParam.new(params.to_unsafe_h)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_releasable
|
|
||||||
@releasable = authorize policy_scope(releasable_param.type).find(releasable_param.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = @releasable.project
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -3,9 +3,8 @@ class BroadcastsController < ApplicationController
|
|||||||
|
|
||||||
before_action :set_project
|
before_action :set_project
|
||||||
before_action :build_broadcast, only: [:new, :create]
|
before_action :build_broadcast, only: [:new, :create]
|
||||||
before_action :set_broadcast, only: [:show, :destroy, :update, :destroy_file]
|
before_action :set_broadcast, only: [:show, :destroy, :update]
|
||||||
before_action :set_multi_view_broadcasts, only: [:show]
|
before_action :set_multi_view_broadcasts, only: [:show]
|
||||||
before_action :show_splash_screen, only: :index
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@broadcasts = filtered_broadcasts.order_by_recent.paginate(page: params[:page])
|
@broadcasts = filtered_broadcasts.order_by_recent.paginate(page: params[:page])
|
||||||
@@ -25,23 +24,18 @@ class BroadcastsController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@broadcast.update(broadcast_params)
|
||||||
|
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
|
||||||
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@conference_url = url_for [@broadcast.project, @broadcast, :zoom_meeting]
|
@conference_url = url_for [@broadcast.project, @broadcast, :zoom_meeting]
|
||||||
@recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
@recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
||||||
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page])
|
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:page])
|
||||||
render layout: 'application'
|
render layout: 'application'
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
|
||||||
unless params.has_key?(:broadcast)
|
|
||||||
@broadcast.regenerate_token
|
|
||||||
redirect_to([@project, @broadcast], notice: t('.reset_notice')) and return
|
|
||||||
end
|
|
||||||
|
|
||||||
@broadcast.update(broadcast_params)
|
|
||||||
update_files_section
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
if @broadcast.destroy
|
if @broadcast.destroy
|
||||||
redirect_to [@project, :broadcasts], alert: t(".alert")
|
redirect_to [@project, :broadcasts], alert: t(".alert")
|
||||||
@@ -50,29 +44,10 @@ class BroadcastsController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy_file
|
|
||||||
authorize Broadcast
|
|
||||||
file = ActiveStorage::Attachment.find(params[:file_id])
|
|
||||||
file.destroy
|
|
||||||
|
|
||||||
update_files_section
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def update_files_section
|
|
||||||
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
|
|
||||||
|
|
||||||
pagination_content = ApplicationController.render html: helpers.will_paginate(@files, params: { active_tab: params[:active_tab], page: params[:page], active_files_tab: params[:active_files_tab] })
|
|
||||||
BroadcastsChannel.broadcast_file_upload_updates(@broadcast, @files, pagination_content)
|
|
||||||
end
|
|
||||||
|
|
||||||
def show_splash_screen
|
|
||||||
render :splash if broadcasts.count.zero?
|
|
||||||
end
|
|
||||||
|
|
||||||
def broadcast_params
|
def broadcast_params
|
||||||
params.require(:broadcast).permit(:name, :shoot_location_time_zone, files: [])
|
params.require(:broadcast).permit(:name, files: [])
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_project
|
def set_project
|
||||||
@@ -93,10 +68,7 @@ class BroadcastsController < ApplicationController
|
|||||||
|
|
||||||
def set_multi_view_broadcasts
|
def set_multi_view_broadcasts
|
||||||
authorized_broadcasts = authorize policy_scope(Broadcast).where(id: params[:multi_view_ids]).order_by_recent
|
authorized_broadcasts = authorize policy_scope(Broadcast).where(id: params[:multi_view_ids]).order_by_recent
|
||||||
@multi_view_broadcasts = authorized_broadcasts.map do |b|
|
@multi_view_broadcasts = authorized_broadcasts.map { |b| MultiViewBroadcast.new(b, params[:multi_view_ids]) }
|
||||||
files_page = params[:files_page] if params[:active_files_tab] == b.token
|
|
||||||
MultiViewBroadcast.new(b, params[:multi_view_ids], files_page)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def filtered_broadcasts
|
def filtered_broadcasts
|
||||||
@@ -118,26 +90,17 @@ class BroadcastsController < ApplicationController
|
|||||||
|
|
||||||
delegate_missing_to :@broadcast
|
delegate_missing_to :@broadcast
|
||||||
|
|
||||||
def initialize(broadcast, multi_view_ids, paginate_page)
|
def initialize(broadcast, multi_view_ids)
|
||||||
@broadcast = broadcast
|
@broadcast = broadcast
|
||||||
@multi_view_ids = multi_view_ids
|
@multi_view_ids = multi_view_ids
|
||||||
@paginate_page = paginate_page
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def url
|
def url
|
||||||
project_broadcast_path(@broadcast.project, @broadcast, multi_view_ids: @multi_view_ids, locale: I18n.locale)
|
project_broadcast_path(@broadcast.project, @broadcast, multi_view_ids: @multi_view_ids, locale: I18n.locale)
|
||||||
end
|
end
|
||||||
|
|
||||||
def files
|
|
||||||
@broadcast.files.order("created_at DESC").paginate(page: @paginate_page)
|
|
||||||
end
|
|
||||||
|
|
||||||
def uid
|
def uid
|
||||||
id
|
id
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.model_name
|
|
||||||
Broadcast.model_name
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
module MedicalReleaseContext
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
def medical_releases
|
|
||||||
policy_scope(MedicalRelease)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_medical_release
|
|
||||||
medical_release_id = params[:medical_release_id] || params[:id]
|
|
||||||
|
|
||||||
@medical_release = authorize medical_releases.find(medical_release_id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
module MiscReleaseContext
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
def misc_releases
|
|
||||||
policy_scope(MiscRelease)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_misc_release
|
|
||||||
misc_release_id = params[:misc_release_id] || params[:id]
|
|
||||||
|
|
||||||
@misc_release = authorize misc_releases.find(misc_release_id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
class ContractTemplates::DuplicatesController < ApplicationController
|
|
||||||
before_action :set_contract_template
|
|
||||||
|
|
||||||
def create
|
|
||||||
authorize(ContractTemplate)
|
|
||||||
new_contract_template = @contract_template.dup
|
|
||||||
new_contract_template.name = I18n.t('contract_templates.duplicate.name_prefix', template_name: @contract_template.name)
|
|
||||||
|
|
||||||
# Duplicate rich text fields
|
|
||||||
|
|
||||||
new_contract_template.body = @contract_template.body
|
|
||||||
new_contract_template.guardian_clause = @contract_template.guardian_clause
|
|
||||||
new_contract_template.signature_legal_text = @contract_template.signature_legal_text
|
|
||||||
|
|
||||||
if new_contract_template.save
|
|
||||||
redirect_to [:edit, new_contract_template]
|
|
||||||
else
|
|
||||||
redirect_to [@contract_template.project, :contract_templates], alert: t('.error')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def contract_templates
|
|
||||||
policy_scope(ContractTemplate)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_contract_template
|
|
||||||
@contract_template = contract_templates.find(params[:contract_template_id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -16,12 +16,7 @@ class ContractTemplates::QrCodesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def qr_code
|
def qr_code
|
||||||
if params[:multi_sign_ids].present?
|
authorize QrCode.build_from_contract_template(@contract_template)
|
||||||
contract_templates_group = authorize contract_templates.where(id: params[:multi_sign_ids]).order_by_recent
|
|
||||||
authorize QrCode.build_from_multiple_contract_templates(contract_templates_group, @contract_template.project)
|
|
||||||
else
|
|
||||||
authorize QrCode.build_from_contract_template(@contract_template)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def download_attributes
|
def download_attributes
|
||||||
|
|||||||
@@ -5,10 +5,8 @@ class ContractTemplatesController < ApplicationController
|
|||||||
|
|
||||||
layout 'project'
|
layout 'project'
|
||||||
|
|
||||||
before_action :set_project, except: [:destroy, :edit, :update]
|
before_action :set_project, except: [:destroy]
|
||||||
before_action :set_contract_template, only: [:destroy, :edit, :update]
|
before_action :set_contract_template, only: [:destroy]
|
||||||
before_action :set_project_from_contract_template, only: [:edit, :update]
|
|
||||||
before_action :show_splash_screen, only: :index
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@contract_templates = contract_templates.non_archived.order_by_name.paginate(page: params[:page])
|
@contract_templates = contract_templates.non_archived.order_by_name.paginate(page: params[:page])
|
||||||
@@ -33,20 +31,6 @@ class ContractTemplatesController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
|
||||||
@release_type = @contract_template.release_type
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
|
||||||
@contract_template.attributes = contract_template_params
|
|
||||||
|
|
||||||
if @contract_template.save
|
|
||||||
redirect_to [@project, :contract_templates], notice: t('.notice')
|
|
||||||
else
|
|
||||||
render :edit
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@contract_template.archive
|
@contract_template.archive
|
||||||
redirect_to [@contract_template.project, :contract_templates], alert: t('.archived_notice')
|
redirect_to [@contract_template.project, :contract_templates], alert: t('.archived_notice')
|
||||||
@@ -54,14 +38,6 @@ class ContractTemplatesController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_project_from_contract_template
|
|
||||||
@project = @contract_template.project
|
|
||||||
end
|
|
||||||
|
|
||||||
def show_splash_screen
|
|
||||||
render :splash if contract_templates.non_archived.count.zero?
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_contract_template
|
def set_contract_template
|
||||||
@contract_template = authorize contract_templates.find(params[:id])
|
@contract_template = authorize contract_templates.find(params[:id])
|
||||||
end
|
end
|
||||||
@@ -81,20 +57,11 @@ class ContractTemplatesController < ApplicationController
|
|||||||
def contract_template_params
|
def contract_template_params
|
||||||
params
|
params
|
||||||
.require(:contract_template)
|
.require(:contract_template)
|
||||||
.permit(:name, :release_type, :body, :guardian_clause,
|
.permit(:name, :release_type, :body, :guardian_clause, :fee,
|
||||||
:signature_legal_text, :fee, :amendment_clause,
|
|
||||||
:applicable_medium_id, :applicable_medium_text,
|
:applicable_medium_id, :applicable_medium_text,
|
||||||
:territory_id, :territory_text,
|
:territory_id, :territory_text,
|
||||||
:term_id, :term_text, :accessibility,
|
:term_id, :term_text,
|
||||||
:restriction_id, :restriction_text,
|
:restriction_id, :restriction_text)
|
||||||
:question_1_text, :question_2_text,
|
|
||||||
:question_3_text, :question_4_text,
|
|
||||||
:question_5_text, :question_6_text,
|
|
||||||
:question_7_text, :question_8_text,
|
|
||||||
:question_9_text, :question_10_text,
|
|
||||||
:question_11_text, :question_12_text,
|
|
||||||
:question_13_text, :question_14_text,
|
|
||||||
:question_15_text)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def download_attributes
|
def download_attributes
|
||||||
|
|||||||
@@ -48,10 +48,8 @@ class ContractsController < ApplicationController
|
|||||||
# Native release contracts must be generated on-the-fly; non-native releases have a contract attachment
|
# Native release contracts must be generated on-the-fly; non-native releases have a contract attachment
|
||||||
if releasable.native?
|
if releasable.native?
|
||||||
send_file contract.to_pdf, download_attributes
|
send_file contract.to_pdf, download_attributes
|
||||||
elsif policy(contract).show?
|
|
||||||
redirect_to releasable.contract.service_url
|
|
||||||
else
|
else
|
||||||
raise Pundit::NotAuthorizedError
|
redirect_to releasable.contract.service_url
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -68,8 +68,7 @@ class LocationReleasesController < ApplicationController
|
|||||||
:territory_id, :territory_text,
|
:territory_id, :territory_text,
|
||||||
:term_id, :term_text,
|
:term_id, :term_text,
|
||||||
:restriction_id, :restriction_text,
|
:restriction_id, :restriction_text,
|
||||||
:filming_started_on, :filming_ended_on,
|
:filming_started_on, :filming_ended_on
|
||||||
:filming_hours
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -50,58 +50,11 @@ class MaterialReleasesController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_company
|
|
||||||
person_email
|
|
||||||
person_title
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def material_release_params
|
def material_release_params
|
||||||
params.require(:material_release).permit(person_params, guardian_params, second_guardian_params, :minor,
|
params.require(:material_release).permit(
|
||||||
:name, :address_street1, :address_street2, :address_city, :address_state, :address_zip, :address_country,
|
:name, :address_street1, :address_street2, :address_city, :address_state, :address_zip, :address_country,
|
||||||
|
:person_first_name, :person_last_name, :person_title, :person_company, :person_phone, :person_email,
|
||||||
|
:person_address_street1, :person_address_street2, :person_address_city, :person_address_state, :person_address_zip, :person_address_country,
|
||||||
:applicable_medium_id, :applicable_medium_text,
|
:applicable_medium_id, :applicable_medium_text,
|
||||||
:territory_id, :territory_text,
|
:territory_id, :territory_text,
|
||||||
:term_id, :term_text,
|
:term_id, :term_text,
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
class MedicalReleasesController < ApplicationController
|
|
||||||
include ProjectContext, MedicalReleaseContext
|
|
||||||
|
|
||||||
before_action :set_project, only: [:index]
|
|
||||||
before_action :set_medical_release, only: [:destroy]
|
|
||||||
|
|
||||||
include ProjectLayout
|
|
||||||
|
|
||||||
def index
|
|
||||||
@medical_releases = filtered_medical_releases.order_by_recent.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
|
||||||
@project = @medical_release.project
|
|
||||||
|
|
||||||
if @medical_release.destroy
|
|
||||||
redirect_to [@project, :medical_releases], alert: t(".alert")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def medical_releases
|
|
||||||
if @project
|
|
||||||
policy_scope(@project.medical_releases)
|
|
||||||
else
|
|
||||||
policy_scope(MedicalRelease)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def filtered_medical_releases
|
|
||||||
results = medical_releases
|
|
||||||
|
|
||||||
if params[:query].present?
|
|
||||||
results = results.search(params[:query])
|
|
||||||
end
|
|
||||||
|
|
||||||
results
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
class MiscReleasesController < ApplicationController
|
|
||||||
include ProjectContext, MiscReleaseContext
|
|
||||||
|
|
||||||
before_action :set_project, only: [:index]
|
|
||||||
before_action :set_misc_release, only: [:destroy]
|
|
||||||
|
|
||||||
include ProjectLayout
|
|
||||||
|
|
||||||
def index
|
|
||||||
@misc_releases = filtered_misc_releases.order_by_recent.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
|
||||||
@project = @misc_release.project
|
|
||||||
|
|
||||||
if @misc_release.destroy
|
|
||||||
redirect_to [@project, :misc_releases], alert: t(".alert")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def misc_releases
|
|
||||||
if @project
|
|
||||||
policy_scope(@project.misc_releases)
|
|
||||||
else
|
|
||||||
policy_scope(MiscRelease)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def filtered_misc_releases
|
|
||||||
results = misc_releases
|
|
||||||
|
|
||||||
if params[:query].present?
|
|
||||||
results = results.search(params[:query])
|
|
||||||
end
|
|
||||||
|
|
||||||
results
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -18,7 +18,6 @@ class PasswordResetsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
redirect_to new_session_path, notice: t(".notice") if @user.nil?
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class ProjectsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def features_settings_params
|
def features_settings_params
|
||||||
%i(appearance_release location_release material_release acquired_media_release music_release talent_release medical_release misc_release video_analysis)
|
%i(appearance_release location_release material_release acquired_media_release music_release talent_release video_analysis)
|
||||||
end
|
end
|
||||||
|
|
||||||
def project_params_with_current_account
|
def project_params_with_current_account
|
||||||
|
|||||||
@@ -41,70 +41,28 @@ class Public::AcquiredMediaReleasesController < Public::BaseController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_fax
|
|
||||||
person_email
|
|
||||||
person_title
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def acquired_media_release_params
|
def acquired_media_release_params
|
||||||
params.require(:acquired_media_release).permit(person_params,
|
params.require(:acquired_media_release).permit(
|
||||||
guardian_params,
|
:name,
|
||||||
second_guardian_params,
|
:description,
|
||||||
:minor,
|
:person_title,
|
||||||
:name,
|
:person_phone,
|
||||||
:description,
|
:person_fax,
|
||||||
:signature_base64,
|
:person_address_street1,
|
||||||
:locale, :contract_template,
|
:person_address_street2,
|
||||||
categories: [],
|
:person_address_city,
|
||||||
file_infos_attributes: %i[
|
:person_address_state,
|
||||||
filename
|
:person_address_zip,
|
||||||
content_type
|
:person_address_country,
|
||||||
byte_size
|
:signature_base64,
|
||||||
])
|
:locale, :contract_template,
|
||||||
|
categories: [],
|
||||||
|
file_infos_attributes: [
|
||||||
|
:filename,
|
||||||
|
:content_type,
|
||||||
|
:byte_size
|
||||||
|
]
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def acquired_media_release_params_with_locale
|
def acquired_media_release_params_with_locale
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
class Public::AmendmentsController < Public::BaseController
|
|
||||||
skip_after_action :verify_authorized, :verify_policy_scoped
|
|
||||||
before_action :set_account, :set_project, :set_contract_template, :set_release
|
|
||||||
|
|
||||||
def new
|
|
||||||
if @release.amendment_signed?
|
|
||||||
render :create, locals: { already_signed: true }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
if @release.amendment_signed?
|
|
||||||
render :create, locals: { already_signed: true }
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
@release.attributes = amendment_params
|
|
||||||
|
|
||||||
render :new unless @release.save(context: :amendment)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def amendment_params
|
|
||||||
params.require(releasable_param.name).permit(:amendment_signer_name, :amendment_signature_base64)
|
|
||||||
end
|
|
||||||
|
|
||||||
def releasable_param
|
|
||||||
@releasable_param ||= ReleasableParam.new(params.to_unsafe_h)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_release
|
|
||||||
@release = @contract_template.releases.find(releasable_param.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_contract_template
|
|
||||||
@contract_template = @project.contract_templates.find(params[:contract_template_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = @account.projects.find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_account
|
|
||||||
@account = Account.find_by(slug: params[:account_id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -39,60 +39,11 @@ class Public::AppearanceReleasesController < Public::BaseController
|
|||||||
authorize appearance_releases.build(params)
|
authorize appearance_releases.build(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_email
|
|
||||||
person_photo
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def appearance_release_params
|
def appearance_release_params
|
||||||
params.require(:appearance_release).permit(person_params, guardian_params,
|
params.require(:appearance_release).permit(:person_address, :person_first_name, :person_last_name, :person_phone, :person_email, :person_photo,
|
||||||
second_guardian_params,
|
:guardian_address, :guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_photo, :minor,
|
||||||
:minor, :signature_base64,
|
:signature_base64, :person_date_of_birth,
|
||||||
:person_date_of_birth,
|
:locale, :contract_template,)
|
||||||
:locale, :contract_template)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def appearance_release_params_with_locale
|
def appearance_release_params_with_locale
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ class Public::BroadcastsController < Public::BaseController
|
|||||||
@conference_url = broadcast_zoom_meeting_url(@broadcast.token)
|
@conference_url = broadcast_zoom_meeting_url(@broadcast.token)
|
||||||
@multi_view_broadcasts = multi_view_broadcasts
|
@multi_view_broadcasts = multi_view_broadcasts
|
||||||
@recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
@recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
||||||
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page])
|
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:page])
|
||||||
|
|
||||||
render 'broadcasts/show'
|
render 'broadcasts/show'
|
||||||
end
|
end
|
||||||
@@ -14,9 +14,6 @@ class Public::BroadcastsController < Public::BaseController
|
|||||||
def update
|
def update
|
||||||
@broadcast.update(broadcast_params)
|
@broadcast.update(broadcast_params)
|
||||||
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
|
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
|
||||||
|
|
||||||
pagination_content = ApplicationController.render html: helpers.will_paginate(@files,params: { active_tab: params[:active_tab], page: params[:page], active_files_tab: params[:active_files_tab] })
|
|
||||||
BroadcastsChannel.broadcast_file_upload_updates(@broadcast, @files, pagination_content)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@@ -29,18 +26,11 @@ class Public::BroadcastsController < Public::BaseController
|
|||||||
Broadcast.
|
Broadcast.
|
||||||
where(token: params[:multi_view_tokens]).
|
where(token: params[:multi_view_tokens]).
|
||||||
order_by_recent.
|
order_by_recent.
|
||||||
map do |b|
|
map { |b| MultiViewBroadcast.new(b, params[:multi_view_tokens]) }
|
||||||
files_page = params[:files_page] if params[:active_files_tab] == b.token
|
|
||||||
MultiViewBroadcast.new(b, params[:multi_view_tokens], files_page)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_broadcast
|
def set_broadcast
|
||||||
@broadcast = Broadcast.find_by_token(params[:token])
|
@broadcast = Broadcast.find_by_token(params[:token])
|
||||||
|
|
||||||
unless @broadcast.present?
|
|
||||||
redirect_to [:new, :session], alert: t(".alert")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class MultiViewBroadcast
|
class MultiViewBroadcast
|
||||||
@@ -48,26 +38,17 @@ class Public::BroadcastsController < Public::BaseController
|
|||||||
|
|
||||||
delegate_missing_to :@broadcast
|
delegate_missing_to :@broadcast
|
||||||
|
|
||||||
def initialize(broadcast, multi_view_tokens, paginate_page)
|
def initialize(broadcast, multi_view_tokens)
|
||||||
@broadcast = broadcast
|
@broadcast = broadcast
|
||||||
@multi_view_tokens = multi_view_tokens
|
@multi_view_tokens = multi_view_tokens
|
||||||
@paginate_page = paginate_page
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def url
|
def url
|
||||||
broadcast_url(uid, multi_view_tokens: @multi_view_tokens, host: AppHost.new.domain_with_port, locale: I18n.locale)
|
broadcast_url(uid, multi_view_tokens: @multi_view_tokens, host: AppHost.new.domain_with_port, locale: I18n.locale)
|
||||||
end
|
end
|
||||||
|
|
||||||
def files
|
|
||||||
@broadcast.files.order("created_at DESC").paginate(page: @paginate_page)
|
|
||||||
end
|
|
||||||
|
|
||||||
def uid
|
def uid
|
||||||
token
|
token
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.model_name
|
|
||||||
Broadcast.model_name
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
class Public::ContractTemplatesController < Public::BaseController
|
|
||||||
skip_after_action :verify_authorized, :verify_policy_scoped
|
|
||||||
before_action :set_account, :set_project
|
|
||||||
|
|
||||||
def index
|
|
||||||
@contract_templates = @project.contract_templates.where(id: params[:contract_template_ids]).order_by_name.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = @account.projects.find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_account
|
|
||||||
@account = Account.find_by(slug: params[:account_id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -63,9 +63,7 @@ class Public::LocationReleasesController < Public::BaseController
|
|||||||
:person_address_zip,
|
:person_address_zip,
|
||||||
:person_address_country,
|
:person_address_country,
|
||||||
:signature_base64,
|
:signature_base64,
|
||||||
:locale, :contract_template, :filming_started_on, :filming_ended_on,
|
:locale, :contract_template, :filming_started_on, :filming_ended_on
|
||||||
:filming_hours,
|
|
||||||
photos: []
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -39,61 +39,13 @@ class Public::MaterialReleasesController < Public::BaseController
|
|||||||
authorize material_releases.build(params)
|
authorize material_releases.build(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_email
|
|
||||||
person_title
|
|
||||||
person_company
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def material_release_params
|
def material_release_params
|
||||||
params.require(:material_release).permit(person_params, guardian_params, second_guardian_params, :minor,
|
params.require(:material_release).permit(
|
||||||
:name, :address_street1, :address_street2, :address_city, :address_state, :address_zip, :address_country,
|
:name, :address_street1, :address_street2, :address_city, :address_state, :address_zip, :address_country,
|
||||||
|
:person_first_name, :person_last_name, :person_title, :person_company, :person_phone, :person_email,
|
||||||
|
:person_address_street1, :person_address_street2, :person_address_city, :person_address_state, :person_address_zip, :person_address_country,
|
||||||
:signature_base64,
|
:signature_base64,
|
||||||
:locale, :contract_template, :description, photos: []
|
:locale, :contract_template, :description
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,123 +0,0 @@
|
|||||||
class Public::MedicalReleasesController < Public::BaseController
|
|
||||||
before_action :set_account, :set_project, :set_contract_template
|
|
||||||
|
|
||||||
def new
|
|
||||||
@medical_release = build_medical_release
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
@medical_release = build_medical_release(medical_release_params_with_locale_and_contract_template)
|
|
||||||
|
|
||||||
if @medical_release.save(context: :native)
|
|
||||||
if @medical_release.contract_template.present?
|
|
||||||
AttachContractToReleasableJob.perform_later(@medical_release)
|
|
||||||
end
|
|
||||||
log_create_analytics
|
|
||||||
else
|
|
||||||
render :new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = @account.projects.find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_account
|
|
||||||
@account = Account.find_by(slug: params[:account_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_contract_template
|
|
||||||
@contract_template = @project.contract_templates.find(params[:contract_template_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def medical_releases
|
|
||||||
policy_scope(@project.medical_releases)
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_medical_release(params = {})
|
|
||||||
authorize medical_releases.build(params)
|
|
||||||
end
|
|
||||||
|
|
||||||
def medical_release_params
|
|
||||||
params
|
|
||||||
.require(:medical_release)
|
|
||||||
.permit(
|
|
||||||
person_params,
|
|
||||||
guardian_params,
|
|
||||||
second_guardian_params,
|
|
||||||
:minor,
|
|
||||||
:signature_base64,
|
|
||||||
:locale,
|
|
||||||
:contract_template,
|
|
||||||
:question_1_answer, :question_2_answer,
|
|
||||||
:question_3_answer, :question_4_answer,
|
|
||||||
:question_5_answer, :question_6_answer,
|
|
||||||
:question_7_answer, :question_8_answer,
|
|
||||||
:question_9_answer, :question_10_answer,
|
|
||||||
:question_11_answer, :question_12_answer,
|
|
||||||
:question_13_answer, :question_14_answer,
|
|
||||||
:question_15_answer, photos: [],
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_email
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def medical_release_params_with_locale
|
|
||||||
medical_release_params.merge(locale: I18n.locale)
|
|
||||||
end
|
|
||||||
|
|
||||||
def medical_release_params_with_locale_and_contract_template
|
|
||||||
medical_release_params_with_locale.merge(contract_template: @contract_template)
|
|
||||||
end
|
|
||||||
|
|
||||||
def log_create_analytics
|
|
||||||
TrackAnalyticsJob.perform_later(nil, nil, :track_create_native_release, release_type: MedicalRelease.to_s, account: @account, user_agent: request.user_agent, user_ip: request.remote_ip)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
class Public::MiscReleasesController < Public::BaseController
|
|
||||||
before_action :set_account, :set_project, :set_contract_template
|
|
||||||
|
|
||||||
def new
|
|
||||||
@misc_release = build_misc_release
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
@misc_release = build_misc_release(misc_release_params_with_locale_and_contract_template)
|
|
||||||
|
|
||||||
if @misc_release.save(context: :native)
|
|
||||||
if @misc_release.contract_template.present?
|
|
||||||
AttachContractToReleasableJob.perform_later(@misc_release)
|
|
||||||
end
|
|
||||||
log_create_analytics
|
|
||||||
else
|
|
||||||
render :new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = @account.projects.find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_account
|
|
||||||
@account = Account.find_by(slug: params[:account_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_contract_template
|
|
||||||
@contract_template = @project.contract_templates.find(params[:contract_template_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def misc_releases
|
|
||||||
policy_scope(@project.misc_releases)
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_misc_release(params = {})
|
|
||||||
authorize misc_releases.build(params)
|
|
||||||
end
|
|
||||||
|
|
||||||
def misc_release_params
|
|
||||||
params
|
|
||||||
.require(:misc_release)
|
|
||||||
.permit(
|
|
||||||
person_params,
|
|
||||||
guardian_params,
|
|
||||||
questionnaire_params,
|
|
||||||
:signature_base64,
|
|
||||||
:locale,
|
|
||||||
:contract_template,
|
|
||||||
photos: [],
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def person_params
|
|
||||||
[
|
|
||||||
:person_first_name,
|
|
||||||
:person_last_name,
|
|
||||||
:person_phone,
|
|
||||||
:person_email,
|
|
||||||
:person_address_street1,
|
|
||||||
:person_address_street2,
|
|
||||||
:person_address_city,
|
|
||||||
:person_address_state,
|
|
||||||
:person_address_zip,
|
|
||||||
:person_address_country,
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
[
|
|
||||||
:guardian_first_name,
|
|
||||||
:guardian_last_name,
|
|
||||||
:guardian_phone,
|
|
||||||
:guardian_email,
|
|
||||||
:minor,
|
|
||||||
:guardian_address_street1,
|
|
||||||
:guardian_address_street2,
|
|
||||||
:guardian_address_city,
|
|
||||||
:guardian_address_state,
|
|
||||||
:guardian_address_zip,
|
|
||||||
:guardian_address_country,
|
|
||||||
:guardian_photo
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def questionnaire_params
|
|
||||||
[
|
|
||||||
:question_1_answer,
|
|
||||||
:question_2_answer,
|
|
||||||
:question_3_answer,
|
|
||||||
:question_4_answer,
|
|
||||||
:question_5_answer,
|
|
||||||
:question_6_answer,
|
|
||||||
:question_7_answer,
|
|
||||||
:question_8_answer,
|
|
||||||
:question_9_answer,
|
|
||||||
:question_10_answer,
|
|
||||||
:question_11_answer,
|
|
||||||
:question_12_answer,
|
|
||||||
:question_13_answer,
|
|
||||||
:question_14_answer,
|
|
||||||
:question_15_answer,
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def misc_release_params_with_locale
|
|
||||||
misc_release_params.merge(locale: I18n.locale)
|
|
||||||
end
|
|
||||||
|
|
||||||
def misc_release_params_with_locale_and_contract_template
|
|
||||||
misc_release_params_with_locale.merge(contract_template: @contract_template)
|
|
||||||
end
|
|
||||||
|
|
||||||
def log_create_analytics
|
|
||||||
TrackAnalyticsJob.perform_later(nil, nil, :track_create_native_release, release_type: MiscRelease.to_s, account: @account, user_agent: request.user_agent, user_ip: request.remote_ip)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -45,59 +45,42 @@ class Public::TalentReleasesController < Public::BaseController
|
|||||||
.permit(
|
.permit(
|
||||||
person_params,
|
person_params,
|
||||||
guardian_params,
|
guardian_params,
|
||||||
second_guardian_params,
|
|
||||||
:signature_base64,
|
:signature_base64,
|
||||||
:locale,
|
:locale,
|
||||||
:contract_template,
|
:contract_template,
|
||||||
photos: []
|
photos: [],
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
def person_params
|
||||||
%i[
|
[
|
||||||
person_first_name
|
:person_first_name,
|
||||||
person_last_name
|
:person_last_name,
|
||||||
person_phone
|
:person_phone,
|
||||||
person_email
|
:person_email,
|
||||||
person_address_street1
|
:person_address_street1,
|
||||||
person_address_street2
|
:person_address_street2,
|
||||||
person_address_city
|
:person_address_city,
|
||||||
person_address_state
|
:person_address_state,
|
||||||
person_address_zip
|
:person_address_zip,
|
||||||
person_address_country
|
:person_address_country,
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def guardian_params
|
def guardian_params
|
||||||
%i[
|
[
|
||||||
guardian_first_name
|
:guardian_first_name,
|
||||||
guardian_last_name
|
:guardian_last_name,
|
||||||
guardian_phone
|
:guardian_phone,
|
||||||
guardian_email
|
:guardian_email,
|
||||||
minor
|
:minor,
|
||||||
guardian_address_street1
|
:guardian_address_street1,
|
||||||
guardian_address_street2
|
:guardian_address_street2,
|
||||||
guardian_address_city
|
:guardian_address_city,
|
||||||
guardian_address_state
|
:guardian_address_state,
|
||||||
guardian_address_zip
|
:guardian_address_zip,
|
||||||
guardian_address_country
|
:guardian_address_country,
|
||||||
guardian_photo
|
:guardian_photo,
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
guardian_2_photo
|
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,7 @@ class ReleaseTemplateImportsController < ApplicationController
|
|||||||
|
|
||||||
templates = []
|
templates = []
|
||||||
filtered_contract_templates.each do |contract_template|
|
filtered_contract_templates.each do |contract_template|
|
||||||
next if contract_template.duplicated? ||
|
next if contract_template.duplicated? || contract_template.project == @project
|
||||||
contract_template.archived? ||
|
|
||||||
contract_template.project == @project
|
|
||||||
|
|
||||||
already_imported = contract_template.duplicates.non_archived.pluck(:project_id).include?(@project.id)
|
already_imported = contract_template.duplicates.non_archived.pluck(:project_id).include?(@project.id)
|
||||||
templates << OpenStruct.new(template: contract_template, already_imported?: already_imported)
|
templates << OpenStruct.new(template: contract_template, already_imported?: already_imported)
|
||||||
|
|||||||
@@ -14,10 +14,6 @@ class StreamNotificationsController < ApplicationController
|
|||||||
when "video.live_stream.recording"
|
when "video.live_stream.recording"
|
||||||
@broadcast.streamer_recording!
|
@broadcast.streamer_recording!
|
||||||
notify_users
|
notify_users
|
||||||
when "video.asset.ready"
|
|
||||||
full_live_stream_playback_uid = notification.dig(:data, :playback_ids, 0, :id)
|
|
||||||
@broadcast.update(full_live_stream_playback_uid: full_live_stream_playback_uid)
|
|
||||||
notify_users
|
|
||||||
when "video.live_stream.active"
|
when "video.live_stream.active"
|
||||||
@broadcast.active!
|
@broadcast.active!
|
||||||
notify_users
|
notify_users
|
||||||
@@ -32,9 +28,8 @@ class StreamNotificationsController < ApplicationController
|
|||||||
asset_uid = notification.dig(:object, :id)
|
asset_uid = notification.dig(:object, :id)
|
||||||
playback_uid = notification.dig(:data, :playback_ids, 0, :id)
|
playback_uid = notification.dig(:data, :playback_ids, 0, :id)
|
||||||
file_name = notification.dig(:data, :static_renditions, :files, -1, :name)
|
file_name = notification.dig(:data, :static_renditions, :files, -1, :name)
|
||||||
duration = notification.dig(:data, :duration)
|
|
||||||
|
|
||||||
recording = @broadcast.broadcast_recordings.create!(asset_uid: asset_uid, asset_playback_uid: playback_uid, file_name: file_name, duration: duration)
|
recording = @broadcast.broadcast_recordings.create!(asset_uid: asset_uid, asset_playback_uid: playback_uid, file_name: file_name)
|
||||||
recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
||||||
|
|
||||||
link = helpers.link_to(recording.broadcast_name.titleize, recording.download_url, target: "_blank")
|
link = helpers.link_to(recording.broadcast_name.titleize, recording.download_url, target: "_blank")
|
||||||
@@ -63,17 +58,11 @@ class StreamNotificationsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def set_broadcast
|
def set_broadcast
|
||||||
case notification_type
|
if notification_type == "video.asset.static_renditions.ready"
|
||||||
when "video.asset.static_renditions.ready", "video.asset.ready"
|
|
||||||
live_stream_id = notification.dig(:stream_notification, :data, :live_stream_id)
|
live_stream_id = notification.dig(:stream_notification, :data, :live_stream_id)
|
||||||
@broadcast = Broadcast.find_by(stream_uid: live_stream_id)
|
@broadcast = Broadcast.find_by!(stream_uid: live_stream_id)
|
||||||
else
|
else
|
||||||
@broadcast = Broadcast.find_by(stream_uid: notification_object_id)
|
@broadcast = Broadcast.find_by!(stream_uid: notification_object_id)
|
||||||
end
|
|
||||||
|
|
||||||
if @broadcast.nil?
|
|
||||||
logger.info "Ignoring broadcast from other environment. Type = #{notification_type}. Id = #{live_stream_id} / #{notification_object_id}"
|
|
||||||
head :ok
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -61,67 +61,15 @@ class TalentReleasesController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_email
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
minor
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
guardian_photo
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
guardian_2_photo
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def talent_release_params
|
def talent_release_params
|
||||||
params.require(:talent_release).permit(person_params,
|
params.require(:talent_release).permit(
|
||||||
guardian_params,
|
:person_first_name, :person_last_name, :person_phone, :guardian_photo, :person_email,
|
||||||
second_guardian_params,
|
:person_address_street1, :person_address_street2, :person_address_city, :person_address_state, :person_address_zip, :person_address_country,
|
||||||
:contract, { photos: [] },
|
:guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_email, :minor,
|
||||||
:applicable_medium_id,
|
:guardian_address_street1, :guardian_address_street2, :guardian_address_city, :guardian_address_state, :guardian_address_zip, :guardian_address_country,
|
||||||
:applicable_medium_text,
|
:contract, { photos: [] },
|
||||||
:territory_id,
|
:applicable_medium_id, :applicable_medium_text, :territory_id, :territory_text, :term_id, :term_text, :restriction_id, :restriction_text
|
||||||
:territory_text,
|
)
|
||||||
:term_id,
|
|
||||||
:term_text,
|
|
||||||
:restriction_id,
|
|
||||||
:restriction_text)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_talent_release(attrs = {})
|
def build_talent_release(attrs = {})
|
||||||
|
|||||||
@@ -4,29 +4,30 @@ class TaskRequestsController < ApplicationController
|
|||||||
before_action :set_project
|
before_action :set_project
|
||||||
before_action :build_task_request, only: [:new, :create]
|
before_action :build_task_request, only: [:new, :create]
|
||||||
before_action :set_task_request, only: [:show, :edit, :update, :cancel]
|
before_action :set_task_request, only: [:show, :edit, :update, :cancel]
|
||||||
before_action :show_splash_screen, only: :index
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@task_requests = task_requests.order_by_recent.paginate(page: params[:page])
|
if params[:completed_only]
|
||||||
|
@task_requests = task_requests.completed.order_by_recent.paginate(page: params[:page])
|
||||||
|
else
|
||||||
|
@task_requests = task_requests.order_by_recent.paginate(page: params[:page])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@task_request.attributes = task_request_params_with_email
|
@task_request.attributes = task_request_params
|
||||||
|
|
||||||
if @task_request.save
|
if @task_request.save
|
||||||
log_create_analytics
|
log_create_analytics
|
||||||
taskme_url = url_for([:admin, @task_request])
|
redirect_to [@project, :task_requests], notice: t(".notice")
|
||||||
SubmitHubspotTaskRequestFormJob.perform_later(@task_request.user_email, taskme_url)
|
|
||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@files = @task_request.files.paginate(page: params[:page])
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
@@ -47,18 +48,10 @@ class TaskRequestsController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def show_splash_screen
|
|
||||||
render :splash if task_requests.count.zero?
|
|
||||||
end
|
|
||||||
|
|
||||||
def task_request_params
|
def task_request_params
|
||||||
params.require(:task_request).permit(:description, :deadline, :time_allowed, :additional_notes, files: [])
|
params.require(:task_request).permit(:description, :deadline, :time_allowed, :additional_notes, files: [])
|
||||||
end
|
end
|
||||||
|
|
||||||
def task_request_params_with_email
|
|
||||||
task_request_params.merge(user_email: Current.user.email)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
def set_project
|
||||||
@project = policy_scope(Project).find(params[:project_id])
|
@project = policy_scope(Project).find(params[:project_id])
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
class TasksController < ApplicationController
|
|
||||||
before_action :set_project
|
|
||||||
|
|
||||||
include ProjectLayout
|
|
||||||
|
|
||||||
def index
|
|
||||||
@tasks = task_requests.completed.order_by_recent.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = policy_scope(Project).find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def task_requests
|
|
||||||
authorize policy_scope(@project.task_requests)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -3,7 +3,6 @@ class VideosController < ApplicationController
|
|||||||
|
|
||||||
before_action :set_project, only: [:index, :new, :create, :landing]
|
before_action :set_project, only: [:index, :new, :create, :landing]
|
||||||
before_action :set_video, only: [:edit, :update]
|
before_action :set_video, only: [:edit, :update]
|
||||||
before_action :show_splash_screen, only: :index
|
|
||||||
|
|
||||||
def landing
|
def landing
|
||||||
authorize Video, :new?
|
authorize Video, :new?
|
||||||
@@ -61,10 +60,6 @@ class VideosController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def show_splash_screen
|
|
||||||
render :splash if videos.count.zero?
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
def set_project
|
||||||
@project = policy_scope(Project).find(params[:project_id])
|
@project = policy_scope(Project).find(params[:project_id])
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ class ZoomNotificationsController < ApplicationController
|
|||||||
skip_before_action :verify_authenticity_token
|
skip_before_action :verify_authenticity_token
|
||||||
|
|
||||||
before_action :authorize_zoom
|
before_action :authorize_zoom
|
||||||
before_action :set_zoom_meeting, only: [:create], if: :meeting_event?
|
before_action :set_zoom_meeting, only: :create
|
||||||
|
|
||||||
def create
|
def create
|
||||||
case notification_event
|
case notification_event
|
||||||
@@ -13,17 +13,8 @@ class ZoomNotificationsController < ApplicationController
|
|||||||
@zoom_meeting.started!
|
@zoom_meeting.started!
|
||||||
when 'meeting.ended'
|
when 'meeting.ended'
|
||||||
@zoom_meeting.ended!
|
@zoom_meeting.ended!
|
||||||
when 'recording.completed'
|
|
||||||
recording = notification.dig(:payload, :object, :recording_files).first
|
|
||||||
AttachRecordingToZoomMeetingJob.perform_later(@zoom_meeting, recording, notification['download_token'])
|
|
||||||
when 'user.deleted'
|
|
||||||
zoom_user = ZoomUser.find_by(api_id: notification.dig(:payload, :object, :id))
|
|
||||||
if zoom_user.present?
|
|
||||||
zoom_user.api_id = nil
|
|
||||||
zoom_user.destroy
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Rails.logger.info notification_event
|
Rails.logger.info notification_type
|
||||||
Rails.logger.info notification
|
Rails.logger.info notification
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -32,24 +23,16 @@ class ZoomNotificationsController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def notification
|
|
||||||
params.to_unsafe_h
|
|
||||||
end
|
|
||||||
|
|
||||||
def notification_event
|
def notification_event
|
||||||
notification.dig(:event)
|
params.dig(:event)
|
||||||
end
|
end
|
||||||
|
|
||||||
def notification_meeting_id
|
def notification_meeting_id
|
||||||
notification.dig(:payload, :object, :id)
|
params.dig(:payload, :object, :id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def notification_host_id
|
def notification_host_id
|
||||||
notification.dig(:payload, :object, :host_id)
|
params.dig(:payload, :object, :host_id)
|
||||||
end
|
|
||||||
|
|
||||||
def meeting_event?
|
|
||||||
notification_event.split(".").first.to_s.in? %w(meeting recording)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_zoom_meeting
|
def set_zoom_meeting
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ module ContactInfoHelper
|
|||||||
end
|
end
|
||||||
|
|
||||||
def email_abbr(email)
|
def email_abbr(email)
|
||||||
content_tag(:abbr, "E: ", title: "Email") + mail_to(email)
|
content_tag(:abbr, "E: ", title: "Email") + email
|
||||||
end
|
end
|
||||||
|
|
||||||
def phone_abbr(phone)
|
def phone_abbr(phone)
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ module DescriptionListHelper
|
|||||||
safe_join(tags)
|
safe_join(tags)
|
||||||
end
|
end
|
||||||
|
|
||||||
def description_list_pair_for(record, attribute, append: nil, custom_label: nil)
|
def description_list_pair_for(record, attribute, append: nil)
|
||||||
term = custom_label.nil? ? translation_for(record, attribute) : custom_label
|
term = translation_for(record, attribute)
|
||||||
definition = record.send(attribute)
|
definition = record.send(attribute)
|
||||||
|
|
||||||
description_list_pair(term, definition, append: append)
|
description_list_pair(term, definition, append: append)
|
||||||
|
|||||||
@@ -2,17 +2,11 @@ module DropzoneHelper
|
|||||||
def dropzone_placeholder_message_for(releasable)
|
def dropzone_placeholder_message_for(releasable)
|
||||||
case releasable.model_name.param_key
|
case releasable.model_name.param_key
|
||||||
when "acquired_media_release"
|
when "acquired_media_release"
|
||||||
'(Optional) To add the licensed photos or videos ("Property") to this release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera'
|
"To Add Photos & Videos to the release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera"
|
||||||
when "material_release"
|
|
||||||
t 'material_releases.form.photos.dropzone_label'
|
|
||||||
when "music_release"
|
when "music_release"
|
||||||
"To Add Audio Files to the release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse files"
|
"To Add Audio Files to the release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse files"
|
||||||
when "location_release"
|
|
||||||
t 'location_releases.form.photos.dropzone_label'
|
|
||||||
when "directory"
|
when "directory"
|
||||||
"To Add Files to the Folder:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse files"
|
"To Add Files to the Folder:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse files"
|
||||||
when "task_request"
|
|
||||||
"To Add Files for the Task:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse files"
|
|
||||||
else
|
else
|
||||||
"To Add Photos to the release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera"
|
"To Add Photos to the release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,12 +5,4 @@ module TooltipHelper
|
|||||||
concat tag.div(class: "tooltip-inner")
|
concat tag.div(class: "tooltip-inner")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_approval_data_for_releasable(release)
|
|
||||||
if release.approved_by_user_name.present?
|
|
||||||
"#{release.approved_by_user_name} [#{release.approved_by_user_email}]"
|
|
||||||
else
|
|
||||||
release.approved_by_user_email
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -13,13 +13,10 @@ module WordmarkHelper
|
|||||||
css += options[:class].to_s
|
css += options[:class].to_s
|
||||||
|
|
||||||
content_tag(:div, class: css) do
|
content_tag(:div, class: css) do
|
||||||
elements = [
|
safe_join [
|
||||||
content_tag(:span, t("shared.#{product_name}")),
|
content_tag(:span, t("shared.#{product_name}")),
|
||||||
content_tag(:span, t("shared.me"))
|
content_tag(:span, t("shared.me"))
|
||||||
]
|
]
|
||||||
prefix = options[:prefix]
|
|
||||||
elements.unshift content_tag(:span, "#{prefix} ") unless prefix.blank?
|
|
||||||
safe_join elements
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
$(document).on("turbolinks:load", () => {
|
$(document).on("turbolinks:load", () => {
|
||||||
$('.datepicker-control').datepicker({
|
$('.datepicker-control').datepicker({
|
||||||
format: "yyyy-mm-dd",
|
format: "yyyy-mm-dd"
|
||||||
todayHighlight: true
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
class AttachRecordingToZoomMeetingJob < ApplicationJob
|
|
||||||
queue_as :default
|
|
||||||
|
|
||||||
def perform(zoom_meeting, recording_hash, download_token)
|
|
||||||
download_url = "#{recording_hash['download_url']}?access_token=#{download_token}"
|
|
||||||
file = URI.open(download_url)
|
|
||||||
if zoom_meeting.recording.attach(io: file, filename: file_name(zoom_meeting, recording_hash), content_type: 'video/mp4')
|
|
||||||
# Temorarily disabling notifications
|
|
||||||
# if zoom_meeting.project.present?
|
|
||||||
# ProjectsChannel.conference_recording_ready(zoom_meeting.project, zoom_meeting.recording)
|
|
||||||
# end
|
|
||||||
|
|
||||||
gateway = ZoomGateway.new
|
|
||||||
gateway.delete_recording(zoom_meeting.api_meeting_id, recording_hash['id'])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def file_name(zoom_meeting, recording_hash)
|
|
||||||
start = recording_hash['recording_start'].to_datetime
|
|
||||||
prefix = zoom_meeting.project.present? ? "#{zoom_meeting.project.name}_" : ''
|
|
||||||
"#{prefix}video_conference_date#{start.strftime("%Y-%m-%d")}_Time_#{start.strftime("%T")}.mp4"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -6,8 +6,8 @@ class GenerateContractsZipJob < ApplicationJob
|
|||||||
before_perform do |job|
|
before_perform do |job|
|
||||||
@project = job.arguments.first
|
@project = job.arguments.first
|
||||||
@download = job.arguments.second
|
@download = job.arguments.second
|
||||||
@release_type = job.arguments.third
|
release_type = job.arguments.third
|
||||||
@folder_name = "#{@project.name.parameterize}_#{get_release_name(@release_type).gsub('_', '-')}"
|
@folder_name = "#{@project.name.parameterize}_#{get_release_name(release_type).gsub('_', '-')}"
|
||||||
@download.update!(name: @folder_name, status: :pending)
|
@download.update!(name: @folder_name, status: :pending)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -20,14 +20,9 @@ class GenerateContractsZipJob < ApplicationJob
|
|||||||
files.each do |attachment|
|
files.each do |attachment|
|
||||||
zipfile.add(attachment, File.join("#{dir}/", attachment))
|
zipfile.add(attachment, File.join("#{dir}/", attachment))
|
||||||
end
|
end
|
||||||
|
|
||||||
if @release_type.constantize.include?(CsvExportable)
|
|
||||||
csv_file = generate_csv releases
|
|
||||||
zipfile.get_output_stream("#{@folder_name}.csv") { |f| f.puts(csv_file) }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@download.file.attach(io: File.open(zipfile_name), filename: "#{@folder_name}.zip")
|
@download.file.attach(io: File.open(zipfile_name), filename: @folder_name)
|
||||||
end
|
end
|
||||||
rescue StandardError => e
|
rescue StandardError => e
|
||||||
Rails.logger.error("Failed to generate download for project (##{project.id}) with release type #{release_type}\n" + e.message)
|
Rails.logger.error("Failed to generate download for project (##{project.id}) with release type #{release_type}\n" + e.message)
|
||||||
@@ -48,19 +43,6 @@ class GenerateContractsZipJob < ApplicationJob
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def generate_csv(releases)
|
|
||||||
release_class = @release_type.constantize
|
|
||||||
headers = release_class.csv_headers
|
|
||||||
|
|
||||||
CSV.generate(headers: true) do |csv|
|
|
||||||
csv << headers
|
|
||||||
releases.each do |release|
|
|
||||||
csv_row_data = release.to_csv_row
|
|
||||||
csv << csv_row_data
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_release_name(release_type)
|
def get_release_name(release_type)
|
||||||
release_type.constantize.model_name.plural
|
release_type.constantize.model_name.plural
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,100 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
class MatchAppearanceReleasesJob < ApplicationJob
|
|
||||||
queue_as :default
|
|
||||||
|
|
||||||
def perform(project, attachments)
|
|
||||||
filtered_attachments_object = filter_attachments attachments
|
|
||||||
|
|
||||||
return if filtered_attachments_object[:keys].blank?
|
|
||||||
|
|
||||||
matching_request = MatchingRequest.create project: project, attachments: filtered_attachments_object[:signed_ids]
|
|
||||||
|
|
||||||
payload = { request_id: matching_request.id, bucket: aws_bucket_name, files: filtered_attachments_object[:keys]}
|
|
||||||
response = BrayniacAI::QrMatching.create! payload
|
|
||||||
matches = response.matches || []
|
|
||||||
key_signed_id_hash = Hash[filtered_attachments_object[:keys].zip(filtered_attachments_object[:signed_ids])]
|
|
||||||
handle_matches matches, project, key_signed_id_hash
|
|
||||||
matching_request.destroy
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def handle_matches(matches, project, key_signed_id_hash)
|
|
||||||
matches.each do |match|
|
|
||||||
contract_key = Array.wrap(match.contracts).first
|
|
||||||
headshot_key = Array.wrap(match.headshots).first
|
|
||||||
identifier = match.identifier
|
|
||||||
|
|
||||||
contract = key_signed_id_hash[contract_key]
|
|
||||||
headshot = key_signed_id_hash[headshot_key]
|
|
||||||
|
|
||||||
next if contract.nil? && headshot.nil?
|
|
||||||
|
|
||||||
identified_release = identifier.blank? ? nil : AppearanceRelease.find_by(identifier: identifier)
|
|
||||||
if identified_release.nil?
|
|
||||||
create_release project, contract, headshot, identifier
|
|
||||||
else
|
|
||||||
update_release identified_release, contract, headshot
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_release(project, contract, headshot, identifier)
|
|
||||||
random_contract_no = AppearanceRelease.random_contract_number.to_s
|
|
||||||
is_incomplete = contract.nil? || headshot.nil?
|
|
||||||
params = {
|
|
||||||
project: project,
|
|
||||||
person_first_name: appearance_first_name(is_incomplete),
|
|
||||||
person_last_name: random_contract_no
|
|
||||||
}
|
|
||||||
|
|
||||||
params[:person_photo] = headshot unless headshot.nil?
|
|
||||||
params[:contract] = contract unless contract.nil?
|
|
||||||
params[:identifier] = identifier unless blank?
|
|
||||||
|
|
||||||
return if AppearanceRelease.create(params)
|
|
||||||
|
|
||||||
logger.error "Failed to create AppearanceRelease with params : \r\n#{params}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def update_release(release, contract, headshot)
|
|
||||||
release.contract = contract unless contract.nil?
|
|
||||||
release.person_photo = headshot unless headshot.nil?
|
|
||||||
|
|
||||||
release.save
|
|
||||||
end
|
|
||||||
|
|
||||||
def appearance_first_name(incomplete)
|
|
||||||
if incomplete
|
|
||||||
I18n.t('appearance_releases.shared.incomplete_match')
|
|
||||||
else
|
|
||||||
I18n.t('appearance_releases.shared.matched_import')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def aws_bucket_name
|
|
||||||
ENV.fetch 'AWS_BUCKET'
|
|
||||||
end
|
|
||||||
|
|
||||||
def filter_attachments(attachments)
|
|
||||||
filtered_attachments_keys = []
|
|
||||||
filtered_attachments_signed_ids = []
|
|
||||||
|
|
||||||
attachments.each do |attachment|
|
|
||||||
blob = ActiveStorage::Blob.find_signed attachment
|
|
||||||
next if blob.nil?
|
|
||||||
|
|
||||||
extension = blob.filename.extension
|
|
||||||
next unless blob.image? || extension == 'pdf'
|
|
||||||
|
|
||||||
filtered_attachments_keys << blob.key
|
|
||||||
filtered_attachments_signed_ids << attachment
|
|
||||||
end
|
|
||||||
|
|
||||||
{
|
|
||||||
keys: filtered_attachments_keys,
|
|
||||||
signed_ids: filtered_attachments_signed_ids
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,13 +1,11 @@
|
|||||||
class SubmitHubspotFormJob < ApplicationJob
|
class SubmitHubspotFormJob < ApplicationJob
|
||||||
queue_as :default
|
queue_as :default
|
||||||
|
|
||||||
def perform(first_name, last_name, email, company_name, additional_params = {})
|
def perform(email, company_name, additional_params = {})
|
||||||
hubspot_form_guid = ENV["HUBSPOT_FORM_GUID"]
|
hubspot_form_guid = ENV["HUBSPOT_FORM_GUID"]
|
||||||
return unless hubspot_form_guid.present?
|
return unless hubspot_form_guid.present?
|
||||||
|
|
||||||
submission_params = {
|
submission_params = {
|
||||||
first_name: first_name,
|
|
||||||
last_name: last_name,
|
|
||||||
email: email,
|
email: email,
|
||||||
company: company_name
|
company: company_name
|
||||||
}.merge(additional_params)
|
}.merge(additional_params)
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
class SubmitHubspotTaskRequestFormJob < ApplicationJob
|
|
||||||
queue_as :default
|
|
||||||
|
|
||||||
def perform(user_email, taskme_url)
|
|
||||||
hubspot_task_request_form_guid = ENV["HUBSPOT_TASK_REQUEST_FORM_GUID"]
|
|
||||||
return unless hubspot_task_request_form_guid.present?
|
|
||||||
|
|
||||||
submission_params = {
|
|
||||||
email: user_email,
|
|
||||||
taskme_url: taskme_url
|
|
||||||
}
|
|
||||||
|
|
||||||
form = Hubspot::Form.new("guid" => hubspot_task_request_form_guid)
|
|
||||||
is_form_sumitted = form.submit(submission_params)
|
|
||||||
|
|
||||||
raise StandardError.new "Failed to submit the task request hubspot form data: #{is_form_sumitted}" unless is_form_sumitted
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -55,10 +55,6 @@ class Account < ApplicationRecord
|
|||||||
User.joins(:project_memberships).where(project_memberships: { project: projects }),
|
User.joins(:project_memberships).where(project_memberships: { project: projects }),
|
||||||
Broadcast.where(project: projects),
|
Broadcast.where(project: projects),
|
||||||
TaskRequest.where(project: projects),
|
TaskRequest.where(project: projects),
|
||||||
ZoomMeeting.where(project: projects),
|
|
||||||
MedicalRelease.where(project: projects),
|
|
||||||
MiscRelease.where(project: projects),
|
|
||||||
MatchingRequest.where(project: projects),
|
|
||||||
self
|
self
|
||||||
])).sum(:byte_size).to_f
|
])).sum(:byte_size).to_f
|
||||||
end
|
end
|
||||||
@@ -83,8 +79,8 @@ class Account < ApplicationRecord
|
|||||||
plan_uid.to_s == "me_suite" || plan_uid.to_s == "releaseme"
|
plan_uid.to_s == "me_suite" || plan_uid.to_s == "releaseme"
|
||||||
end
|
end
|
||||||
|
|
||||||
def taskme_enabled?
|
def assistme_enabled?
|
||||||
ENV["TASKME_ENABLED"] && (plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme")
|
plan_uid.to_s == "me_suite" || plan_uid.to_s == "assistme"
|
||||||
end
|
end
|
||||||
|
|
||||||
def plan_name
|
def plan_name
|
||||||
@@ -95,8 +91,8 @@ class Account < ApplicationRecord
|
|||||||
"DirectME"
|
"DirectME"
|
||||||
when "releaseme"
|
when "releaseme"
|
||||||
"ReleaseME"
|
"ReleaseME"
|
||||||
when "taskme"
|
when "assistme"
|
||||||
"TaskME"
|
"AssistME"
|
||||||
when "me_suite"
|
when "me_suite"
|
||||||
"ME Suite"
|
"ME Suite"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -9,18 +9,6 @@ class AcquiredMediaRelease < ApplicationRecord
|
|||||||
include Signable
|
include Signable
|
||||||
include Syncable
|
include Syncable
|
||||||
include PersonName
|
include PersonName
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
include GuardianPhotoable
|
|
||||||
include SecondGuardianPhotoable
|
|
||||||
include GuardianName
|
|
||||||
include SecondGuardianName
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name file_infos_count]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
has_many :file_infos, as: :releasable, dependent: :destroy
|
has_many :file_infos, as: :releasable, dependent: :destroy
|
||||||
|
|
||||||
@@ -37,38 +25,6 @@ class AcquiredMediaRelease < ApplicationRecord
|
|||||||
%w(person_address_country country)
|
%w(person_address_country country)
|
||||||
]
|
]
|
||||||
|
|
||||||
composed_of :guardian_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_address_street1 street1],
|
|
||||||
%w[guardian_address_street2 street2],
|
|
||||||
%w[guardian_address_city city],
|
|
||||||
%w[guardian_address_state state],
|
|
||||||
%w[guardian_address_zip zip],
|
|
||||||
%w[guardian_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_2_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_2_address_street1 street1],
|
|
||||||
%w[guardian_2_address_street2 street2],
|
|
||||||
%w[guardian_2_address_city city],
|
|
||||||
%w[guardian_2_address_state state],
|
|
||||||
%w[guardian_2_address_zip zip],
|
|
||||||
%w[guardian_2_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
# We don't care for the argument but method WILL receive option name
|
|
||||||
# when called from inside with_option block, hence * argument
|
|
||||||
def self.face_photo_acceptable_content_types(*)
|
|
||||||
['image/png', 'image/jpeg']
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.acceptable_import_file_extensions
|
|
||||||
['.png', '.jpeg', '.jpg', '.pdf']
|
|
||||||
end
|
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :person_email, email: true, allow_blank: true
|
validates :person_email, email: true, allow_blank: true
|
||||||
|
|
||||||
@@ -87,11 +43,10 @@ class AcquiredMediaRelease < ApplicationRecord
|
|||||||
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
|
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
|
||||||
]
|
]
|
||||||
|
|
||||||
# CATEGORIES = ["Artwork", "Film Footage", "Video Footage", "Still Photograph"].freeze
|
CATEGORIES = ["Artwork", "Film Footage", "Video Footage", "Still Photograph"].freeze
|
||||||
CATEGORIES = ["Film Footage", "Video Footage", "Still Photograph"].freeze
|
|
||||||
|
|
||||||
def second_guardian_present?
|
def minor?
|
||||||
guardian_2_first_name.present?
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def contact_person
|
def contact_person
|
||||||
@@ -101,8 +56,4 @@ class AcquiredMediaRelease < ApplicationRecord
|
|||||||
def uses_edl?
|
def uses_edl?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def file_infos_count
|
|
||||||
file_infos.any? ? file_infos.size : I18n.t('acquired_media_releases.acquired_media_release.no_media')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -12,54 +12,10 @@ class AppearanceRelease < ApplicationRecord
|
|||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
include GuardianPhotoable
|
include GuardianPhotoable
|
||||||
include SecondGuardianPhotoable
|
|
||||||
include GuardianName
|
include GuardianName
|
||||||
include SecondGuardianName
|
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name contact_info]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
has_one_attached :person_photo
|
has_one_attached :person_photo
|
||||||
|
|
||||||
composed_of :person_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[person_address_street1 street1],
|
|
||||||
%w[person_address_street2 street2],
|
|
||||||
%w[person_address_city city],
|
|
||||||
%w[person_address_state state],
|
|
||||||
%w[person_address_zip zip],
|
|
||||||
%w[person_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_address_street1 street1],
|
|
||||||
%w[guardian_address_street2 street2],
|
|
||||||
%w[guardian_address_city city],
|
|
||||||
%w[guardian_address_state state],
|
|
||||||
%w[guardian_address_zip zip],
|
|
||||||
%w[guardian_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_2_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_2_address_street1 street1],
|
|
||||||
%w[guardian_2_address_street2 street2],
|
|
||||||
%w[guardian_2_address_city city],
|
|
||||||
%w[guardian_2_address_state state],
|
|
||||||
%w[guardian_2_address_zip zip],
|
|
||||||
%w[guardian_2_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# These validations apply to all releases
|
# These validations apply to all releases
|
||||||
validates :person_email, email: true, allow_blank: true
|
validates :person_email, email: true, allow_blank: true
|
||||||
validates :person_first_name, :person_last_name, presence: true
|
validates :person_first_name, :person_last_name, presence: true
|
||||||
@@ -83,7 +39,6 @@ class AppearanceRelease < ApplicationRecord
|
|||||||
# These validations apply to releases being signed by a minor
|
# These validations apply to releases being signed by a minor
|
||||||
with_options if: :minor? do
|
with_options if: :minor? do
|
||||||
validates :guardian_first_name, :guardian_last_name, presence: true
|
validates :guardian_first_name, :guardian_last_name, presence: true
|
||||||
validates :guardian_email, email: true, allow_blank: true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
validates :person_photo, content_type: face_photo_acceptable_content_types
|
validates :person_photo, content_type: face_photo_acceptable_content_types
|
||||||
@@ -115,18 +70,7 @@ class AppearanceRelease < ApplicationRecord
|
|||||||
scope :having_no_person_photo, -> { left_joins(:person_photo_attachment).group(:id).having('COUNT(active_storage_attachments) = 0') }
|
scope :having_no_person_photo, -> { left_joins(:person_photo_attachment).group(:id).having('COUNT(active_storage_attachments) = 0') }
|
||||||
scope :with_person_name, ->(name) { where('person_first_name ILIKE ? OR person_last_name ILIKE ?', "%#{name}%") }
|
scope :with_person_name, ->(name) { where('person_first_name ILIKE ? OR person_last_name ILIKE ?', "%#{name}%") }
|
||||||
|
|
||||||
searchable_on %i[
|
searchable_on %i[person_first_name person_last_name person_address person_email person_phone]
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
person_email
|
|
||||||
person_phone
|
|
||||||
]
|
|
||||||
|
|
||||||
# All releases must respond to the following messages
|
# All releases must respond to the following messages
|
||||||
def name
|
def name
|
||||||
@@ -153,10 +97,6 @@ class AppearanceRelease < ApplicationRecord
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def second_guardian_present?
|
|
||||||
self.guardian_2_first_name.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def contract_file_name
|
def contract_file_name
|
||||||
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime('%Y.%m.%d')}_#{release_number}_#{filename_suffix.parameterize}"
|
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime('%Y.%m.%d')}_#{release_number}_#{filename_suffix.parameterize}"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ class BlankContract
|
|||||||
end
|
end
|
||||||
|
|
||||||
def to_pdf
|
def to_pdf
|
||||||
kit = PDFKit.new(as_html, margin_right: 1, margin_left: 1, margin_top: 10, margin_bottom: 1)
|
kit = PDFKit.new(as_html)
|
||||||
kit.to_file("tmp/#{filename}")
|
kit.to_file("tmp/#{filename}")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ class Broadcast < ApplicationRecord
|
|||||||
|
|
||||||
has_secure_token
|
has_secure_token
|
||||||
|
|
||||||
|
scope :order_by_recent, -> { order(created_at: :desc) }
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
|
|
||||||
enum status: [:created, :active, :idle]
|
enum status: [:created, :active, :idle]
|
||||||
@@ -30,10 +32,6 @@ class Broadcast < ApplicationRecord
|
|||||||
"https://stream.mux.com/#{stream_playback_uid}.m3u8"
|
"https://stream.mux.com/#{stream_playback_uid}.m3u8"
|
||||||
end
|
end
|
||||||
|
|
||||||
def full_live_stream_playback_url
|
|
||||||
full_live_stream_playback_uid.blank? ? stream_playback_url : "https://stream.mux.com/#{full_live_stream_playback_uid}.m3u8"
|
|
||||||
end
|
|
||||||
|
|
||||||
def stream_server_url
|
def stream_server_url
|
||||||
ENV['MUX_BROADCAST_SERVER_URL']
|
ENV['MUX_BROADCAST_SERVER_URL']
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
class BroadcastRecording < ApplicationRecord
|
class BroadcastRecording < ApplicationRecord
|
||||||
belongs_to :broadcast
|
belongs_to :broadcast
|
||||||
|
|
||||||
|
scope :order_by_recent, -> { order(created_at: :desc) }
|
||||||
|
|
||||||
delegate :name, to: :broadcast, prefix: :broadcast
|
delegate :name, to: :broadcast, prefix: :broadcast
|
||||||
|
|
||||||
validates :asset_uid, uniqueness: true
|
validates :asset_uid, uniqueness: true
|
||||||
@@ -14,6 +16,6 @@ class BroadcastRecording < ApplicationRecord
|
|||||||
end
|
end
|
||||||
|
|
||||||
def download_file_name
|
def download_file_name
|
||||||
"#{broadcast_name}_Date_#{created_at.in_time_zone(broadcast.shoot_location_time_zone).strftime("%Y-%m-%d")}_Time_#{created_at.in_time_zone(broadcast.shoot_location_time_zone).strftime("%T")}".parameterize
|
"#{broadcast_name}_Date_#{created_at.strftime("%Y-%m-%d")}_Time_#{created_at.strftime("%T")}".parameterize
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
module Amendmenable
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
include ActiveStorageSupport::SupportForBase64
|
|
||||||
|
|
||||||
has_one_base64_attached :amendment_signature
|
|
||||||
|
|
||||||
with_options on: :amendment do
|
|
||||||
validates :amendment_signer_name, presence: true
|
|
||||||
validates :amendment_signature, attached: true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def amendment_signable?
|
|
||||||
contract_template.present? && contract_template.amendment_clause.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def amendment_signed?
|
|
||||||
amendment_signature.attached?
|
|
||||||
end
|
|
||||||
|
|
||||||
def amendment_signature_base64
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def amendment_signature_base64=(data_uri)
|
|
||||||
return if data_uri.blank?
|
|
||||||
|
|
||||||
amendment_signature.attach(data: data_uri, filename: "amendment_signature.png", content_type: "image/png", identify: "false")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
module Approvable
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
def approve_by(user)
|
|
||||||
return unless approved_at.nil?
|
|
||||||
|
|
||||||
self.approved_by_user_name = user.full_name
|
|
||||||
self.approved_by_user_email = user.email
|
|
||||||
self.approved_at = Time.zone.now
|
|
||||||
end
|
|
||||||
|
|
||||||
def approved?
|
|
||||||
self.approved_at.present?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module Attachable
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
has_many_attached :attachments
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module CsvExportable
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
COMMON_HEADERS = %i[approved? notes tags signed_at].freeze
|
|
||||||
COMMON_VALUES = %w[clean_notes clean_tags signed_on].freeze
|
|
||||||
|
|
||||||
included do
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
[]
|
|
||||||
end
|
|
||||||
|
|
||||||
def csv_headers
|
|
||||||
headers = custom_csv_exportable_headers + COMMON_HEADERS
|
|
||||||
|
|
||||||
headers.map do |header|
|
|
||||||
I18n.t("#{model_name.plural}.index.table_headers.#{header}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_csv_row
|
|
||||||
(self.class.custom_csv_exportable_headers + COMMON_VALUES).map do |function|
|
|
||||||
send(function)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def contact_info
|
|
||||||
contact_info = ''
|
|
||||||
contact_info += "#{person_address}; " if person_address.present?
|
|
||||||
contact_info += "P: #{person_phone}; " if person_phone.present?
|
|
||||||
contact_info += "E: #{person_email}" if person_email.present?
|
|
||||||
contact_info.delete_suffix '; '
|
|
||||||
end
|
|
||||||
|
|
||||||
def clean_notes
|
|
||||||
notes = ''
|
|
||||||
self.notes.order_by_recent.each do |note|
|
|
||||||
notes += "#{note.content}(#{note.email}), "
|
|
||||||
end
|
|
||||||
notes.delete_suffix ', '
|
|
||||||
end
|
|
||||||
|
|
||||||
def clean_tags
|
|
||||||
tags = ''
|
|
||||||
self.tags.each do |tag|
|
|
||||||
tags += "#{tag.name}, "
|
|
||||||
end
|
|
||||||
tags.delete_suffix ', '
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -6,6 +6,8 @@ module Releasable
|
|||||||
included do
|
included do
|
||||||
belongs_to :project, touch: true
|
belongs_to :project, touch: true
|
||||||
belongs_to :contract_template, optional: true
|
belongs_to :contract_template, optional: true
|
||||||
|
|
||||||
|
scope :order_by_recent, -> { order(created_at: :desc) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def release_number
|
def release_number
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
module SecondGuardianName
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
def guardian_2_name
|
|
||||||
"#{guardian_2_first_name} #{guardian_2_last_name}".titleize
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_2_name=(value)
|
|
||||||
if value.include?(' ')
|
|
||||||
split = value.split(" ", 2)
|
|
||||||
self.guardian_2_first_name = split.first
|
|
||||||
self.guardian_2_last_name = split.last
|
|
||||||
else
|
|
||||||
self.guardian_2_first_name = value
|
|
||||||
self.guardian_2_last_name = "(Not Given)"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
module SecondGuardianPhotoable
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
has_one_attached :guardian_2_photo
|
|
||||||
|
|
||||||
validates :guardian_2_photo, content_type: ["image/png", "image/jpeg"]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -29,10 +29,6 @@ class Contract
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def medical_release?
|
|
||||||
@releasable.instance_of?(MedicalRelease)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def contract_template
|
def contract_template
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ class ContractTemplate < ApplicationRecord
|
|||||||
include Syncable
|
include Syncable
|
||||||
include PgSearch
|
include PgSearch
|
||||||
|
|
||||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
|
||||||
|
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
belongs_to :parent, class_name: 'ContractTemplate', optional: true
|
belongs_to :parent, class_name: 'ContractTemplate', optional: true
|
||||||
has_many :duplicates, class_name: 'ContractTemplate', foreign_key: 'parent_id'
|
has_many :duplicates, class_name: 'ContractTemplate', foreign_key: 'parent_id'
|
||||||
@@ -15,14 +13,10 @@ class ContractTemplate < ApplicationRecord
|
|||||||
has_many :acquired_media_releases, dependent: :restrict_with_error
|
has_many :acquired_media_releases, dependent: :restrict_with_error
|
||||||
has_many :location_releases, dependent: :restrict_with_error
|
has_many :location_releases, dependent: :restrict_with_error
|
||||||
has_many :material_releases, dependent: :restrict_with_error
|
has_many :material_releases, dependent: :restrict_with_error
|
||||||
has_many :medical_releases, dependent: :restrict_with_error
|
|
||||||
has_many :misc_releases, dependent: :restrict_with_error
|
|
||||||
|
|
||||||
monetize :fee_cents
|
monetize :fee_cents
|
||||||
has_rich_text :body
|
has_rich_text :body
|
||||||
has_rich_text :guardian_clause
|
has_rich_text :guardian_clause
|
||||||
has_rich_text :signature_legal_text
|
|
||||||
has_rich_text :amendment_clause
|
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :release_type, presence: true
|
validates :release_type, presence: true
|
||||||
@@ -44,8 +38,6 @@ class ContractTemplate < ApplicationRecord
|
|||||||
scope :non_archived, -> { where(archived_at: nil) }
|
scope :non_archived, -> { where(archived_at: nil) }
|
||||||
scope :order_by_name, -> { order(:name) }
|
scope :order_by_name, -> { order(:name) }
|
||||||
|
|
||||||
enum accessibility: [:public_template, :private_template]
|
|
||||||
|
|
||||||
def fee?
|
def fee?
|
||||||
!fee.zero?
|
!fee.zero?
|
||||||
end
|
end
|
||||||
@@ -58,25 +50,7 @@ class ContractTemplate < ApplicationRecord
|
|||||||
parent.present?
|
parent.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def archived?
|
|
||||||
archived_at.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def archive
|
def archive
|
||||||
update(archived_at: Time.zone.now)
|
update(archived_at: Time.zone.now)
|
||||||
end
|
end
|
||||||
|
|
||||||
def has_questionnaire?
|
|
||||||
(1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence }
|
|
||||||
end
|
|
||||||
|
|
||||||
def editable?
|
|
||||||
releases.size.zero?
|
|
||||||
end
|
|
||||||
|
|
||||||
def attributes
|
|
||||||
result = super()
|
|
||||||
result[:signature_legal_text] = signature_legal_text.as_json
|
|
||||||
result
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ class HeadshotCollection
|
|||||||
def self.for_project(project)
|
def self.for_project(project)
|
||||||
appearance_releases_with_photo = project.appearance_releases.with_person_photo
|
appearance_releases_with_photo = project.appearance_releases.with_person_photo
|
||||||
|
|
||||||
new(project.headshot_collection_uid, appearance_releases_with_photo + project.talent_releases)
|
new(project.id, appearance_releases_with_photo + project.talent_releases)
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(collection_uid, releasables)
|
def initialize(collection_uid, releasables)
|
||||||
@@ -23,7 +23,7 @@ class HeadshotCollection
|
|||||||
collection_uid: collection_uid.to_s,
|
collection_uid: collection_uid.to_s,
|
||||||
bucket_name: aws_bucket_name,
|
bucket_name: aws_bucket_name,
|
||||||
ids_to_images: map_ids_to_images,
|
ids_to_images: map_ids_to_images,
|
||||||
}.reject { |k, v| v.blank? && k != :ids_to_images }
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -10,15 +10,6 @@ class LocationRelease < ApplicationRecord
|
|||||||
include Syncable
|
include Syncable
|
||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
include Amendmenable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name address]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
composed_of :address,
|
composed_of :address,
|
||||||
mapping: [
|
mapping: [
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
class MatchingRequest < ApplicationRecord
|
|
||||||
include Attachable
|
|
||||||
|
|
||||||
belongs_to :project
|
|
||||||
end
|
|
||||||
@@ -10,19 +10,6 @@ class MaterialRelease < ApplicationRecord
|
|||||||
include Syncable
|
include Syncable
|
||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
include GuardianPhotoable
|
|
||||||
include SecondGuardianPhotoable
|
|
||||||
include GuardianName
|
|
||||||
include SecondGuardianName
|
|
||||||
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
composed_of :person_address,
|
composed_of :person_address,
|
||||||
class_name: "Address",
|
class_name: "Address",
|
||||||
@@ -35,39 +22,6 @@ class MaterialRelease < ApplicationRecord
|
|||||||
%w(person_address_country country)
|
%w(person_address_country country)
|
||||||
]
|
]
|
||||||
|
|
||||||
composed_of :guardian_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_address_street1 street1],
|
|
||||||
%w[guardian_address_street2 street2],
|
|
||||||
%w[guardian_address_city city],
|
|
||||||
%w[guardian_address_state state],
|
|
||||||
%w[guardian_address_zip zip],
|
|
||||||
%w[guardian_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_2_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_2_address_street1 street1],
|
|
||||||
%w[guardian_2_address_street2 street2],
|
|
||||||
%w[guardian_2_address_city city],
|
|
||||||
%w[guardian_2_address_state state],
|
|
||||||
%w[guardian_2_address_zip zip],
|
|
||||||
%w[guardian_2_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
# We don't care for the argument but method WILL receive option name
|
|
||||||
# when called from inside with_option block, hence * argument
|
|
||||||
def self.face_photo_acceptable_content_types(*)
|
|
||||||
['image/png', 'image/jpeg']
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.acceptable_import_file_extensions
|
|
||||||
['.png', '.jpeg', '.jpg', '.pdf']
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :person_email, email: true, allow_blank: true
|
validates :person_email, email: true, allow_blank: true
|
||||||
|
|
||||||
@@ -85,8 +39,8 @@ class MaterialRelease < ApplicationRecord
|
|||||||
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
|
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
|
||||||
end
|
end
|
||||||
|
|
||||||
def second_guardian_present?
|
def minor?
|
||||||
guardian_2_first_name.present?
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def uses_edl?
|
def uses_edl?
|
||||||
|
|||||||
@@ -1,121 +0,0 @@
|
|||||||
class MedicalRelease < ApplicationRecord
|
|
||||||
include Contractable
|
|
||||||
include Notable
|
|
||||||
include Photoable
|
|
||||||
include Releasable
|
|
||||||
include Searchable
|
|
||||||
include Signable
|
|
||||||
include Syncable
|
|
||||||
include PersonName
|
|
||||||
include GuardianPhotoable
|
|
||||||
include SecondGuardianPhotoable
|
|
||||||
include GuardianName
|
|
||||||
include SecondGuardianName
|
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name contact_info]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
|
||||||
|
|
||||||
composed_of :person_address,
|
|
||||||
class_name: "Address",
|
|
||||||
mapping: [
|
|
||||||
%w[person_address_street1 street1],
|
|
||||||
%w[person_address_street2 street2],
|
|
||||||
%w[person_address_city city],
|
|
||||||
%w[person_address_state state],
|
|
||||||
%w[person_address_zip zip],
|
|
||||||
%w[person_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_address_street1 street1],
|
|
||||||
%w[guardian_address_street2 street2],
|
|
||||||
%w[guardian_address_city city],
|
|
||||||
%w[guardian_address_state state],
|
|
||||||
%w[guardian_address_zip zip],
|
|
||||||
%w[guardian_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_2_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_2_address_street1 street1],
|
|
||||||
%w[guardian_2_address_street2 street2],
|
|
||||||
%w[guardian_2_address_city city],
|
|
||||||
%w[guardian_2_address_state state],
|
|
||||||
%w[guardian_2_address_zip zip],
|
|
||||||
%w[guardian_2_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
def self.face_photo_acceptable_content_types
|
|
||||||
["image/png", "image/jpeg"]
|
|
||||||
end
|
|
||||||
|
|
||||||
# These validations apply to all releases
|
|
||||||
validates :person_first_name, :person_last_name, presence: true
|
|
||||||
validates :person_email, email: true, allow_blank: true
|
|
||||||
validate :valid_answers
|
|
||||||
|
|
||||||
acts_as_taggable_on :internal_tags, :tags
|
|
||||||
|
|
||||||
# These validations apply to releases being signed by a minor
|
|
||||||
with_options if: :minor? do
|
|
||||||
validates :guardian_email, email: true, allow_blank: true
|
|
||||||
validates :guardian_2_email, email: true, allow_blank: true
|
|
||||||
end
|
|
||||||
|
|
||||||
# These validations apply to releases created natively by the system (i.e. not imported from elsewhere)
|
|
||||||
with_options on: :native do
|
|
||||||
validates :signature, attached: true
|
|
||||||
end
|
|
||||||
|
|
||||||
# These validations apply to releases imported to the system from an outside source
|
|
||||||
with_options on: :non_native do
|
|
||||||
validates :contract, attached: true
|
|
||||||
end
|
|
||||||
|
|
||||||
searchable_on %i[
|
|
||||||
person_first_name person_last_name person_email person_phone
|
|
||||||
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
|
|
||||||
]
|
|
||||||
|
|
||||||
# All releases must respond to the following messages
|
|
||||||
def name
|
|
||||||
person_name
|
|
||||||
end
|
|
||||||
|
|
||||||
def filename_suffix
|
|
||||||
"#{person_last_name} #{person_first_name}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def contact_person
|
|
||||||
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
|
|
||||||
end
|
|
||||||
|
|
||||||
def uses_edl?
|
|
||||||
false
|
|
||||||
end
|
|
||||||
|
|
||||||
def contract_file_name
|
|
||||||
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def valid_answers
|
|
||||||
(1..ContractTemplate::NUMBER_OF_CUSTOM_FIELDS).each do |index|
|
|
||||||
if contract_template && contract_template["question_#{index}_text"].present? &&
|
|
||||||
public_send("question_#{index}_answer").blank?
|
|
||||||
errors.add("question_#{index}", I18n.t('medical_releases.custom_validation_errors.question_answer_is_required'))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
class MiscRelease < ApplicationRecord
|
|
||||||
include Contractable
|
|
||||||
include Notable
|
|
||||||
include Photoable
|
|
||||||
include Releasable
|
|
||||||
include Searchable
|
|
||||||
include Signable
|
|
||||||
include Syncable
|
|
||||||
include PersonName
|
|
||||||
include GuardianName
|
|
||||||
include GuardianPhotoable
|
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name contact_info]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
|
||||||
|
|
||||||
composed_of :person_address,
|
|
||||||
class_name: "Address",
|
|
||||||
mapping: [
|
|
||||||
%w(person_address_street1 street1),
|
|
||||||
%w(person_address_street2 street2),
|
|
||||||
%w(person_address_city city),
|
|
||||||
%w(person_address_state state),
|
|
||||||
%w(person_address_zip zip),
|
|
||||||
%w(person_address_country country)
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_address,
|
|
||||||
class_name: "Address",
|
|
||||||
mapping: [
|
|
||||||
%w(guardian_address_street1 street1),
|
|
||||||
%w(guardian_address_street2 street2),
|
|
||||||
%w(guardian_address_city city),
|
|
||||||
%w(guardian_address_state state),
|
|
||||||
%w(guardian_address_zip zip),
|
|
||||||
%w(guardian_address_country country)
|
|
||||||
]
|
|
||||||
|
|
||||||
def self.face_photo_acceptable_content_types
|
|
||||||
["image/png", "image/jpeg"]
|
|
||||||
end
|
|
||||||
|
|
||||||
# These validations apply to all releases
|
|
||||||
validates :person_first_name, :person_last_name, presence: true
|
|
||||||
validates :person_email, email: true, allow_blank: true
|
|
||||||
|
|
||||||
acts_as_taggable_on :internal_tags, :tags
|
|
||||||
|
|
||||||
# These validations apply to releases created natively by the system (i.e. not imported from elsewhere)
|
|
||||||
with_options on: :native do
|
|
||||||
validates :signature, attached: true
|
|
||||||
end
|
|
||||||
|
|
||||||
# These validations apply to releases imported to the system from an outside source
|
|
||||||
with_options on: :non_native do
|
|
||||||
validates :contract, attached: true
|
|
||||||
end
|
|
||||||
|
|
||||||
with_options if: :minor? do
|
|
||||||
validates :guardian_first_name, :guardian_last_name, presence: true
|
|
||||||
validates :guardian_phone, presence: true
|
|
||||||
end
|
|
||||||
|
|
||||||
searchable_on %i[
|
|
||||||
person_first_name person_last_name person_email person_phone
|
|
||||||
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
|
|
||||||
guardian_address_street1 guardian_address_street2 guardian_address_city guardian_address_state guardian_address_zip guardian_address_country
|
|
||||||
]
|
|
||||||
|
|
||||||
# All releases must respond to the following messages
|
|
||||||
def name
|
|
||||||
person_name
|
|
||||||
end
|
|
||||||
|
|
||||||
def filename_suffix
|
|
||||||
"#{person_last_name} #{person_first_name}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def contact_person
|
|
||||||
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
|
|
||||||
end
|
|
||||||
|
|
||||||
def uses_edl?
|
|
||||||
false
|
|
||||||
end
|
|
||||||
|
|
||||||
def contract_file_name
|
|
||||||
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -7,14 +7,6 @@ class MusicRelease < ApplicationRecord
|
|||||||
include Searchable
|
include Searchable
|
||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name file_infos_count composers_count publishers_count]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
has_many :file_infos, as: :releasable, dependent: :destroy
|
has_many :file_infos, as: :releasable, dependent: :destroy
|
||||||
has_many :composers, dependent: :destroy
|
has_many :composers, dependent: :destroy
|
||||||
@@ -80,18 +72,6 @@ class MusicRelease < ApplicationRecord
|
|||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def file_infos_count
|
|
||||||
file_infos.size
|
|
||||||
end
|
|
||||||
|
|
||||||
def composers_count
|
|
||||||
composers.size
|
|
||||||
end
|
|
||||||
|
|
||||||
def publishers_count
|
|
||||||
publishers.size
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def publisher_percentages_add_up_to_100
|
def publisher_percentages_add_up_to_100
|
||||||
|
|||||||
@@ -4,4 +4,6 @@ class Note < ApplicationRecord
|
|||||||
belongs_to :notable, polymorphic: true
|
belongs_to :notable, polymorphic: true
|
||||||
|
|
||||||
validates :content, presence: true
|
validates :content, presence: true
|
||||||
|
|
||||||
|
scope :order_by_recent, -> { order(created_at: :desc) }
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ class Project < ApplicationRecord
|
|||||||
include Filterable
|
include Filterable
|
||||||
include Syncable
|
include Syncable
|
||||||
|
|
||||||
SIGNABLE_RELEASE_TYPES = %w(talent appearance acquired_media location material medical misc)
|
SIGNABLE_RELEASE_TYPES = %w(talent appearance acquired_media location material)
|
||||||
AVAILABLE_RELEASE_TYPES = %w(appearance location material acquired_media talent music medical misc)
|
AVAILABLE_RELEASE_TYPES = %w(appearance location material acquired_media talent music)
|
||||||
|
|
||||||
belongs_to :account
|
belongs_to :account
|
||||||
has_many :acquired_media_releases, dependent: :destroy
|
has_many :acquired_media_releases, dependent: :destroy
|
||||||
@@ -13,8 +13,6 @@ class Project < ApplicationRecord
|
|||||||
has_many :material_releases, dependent: :destroy
|
has_many :material_releases, dependent: :destroy
|
||||||
has_many :music_releases, dependent: :destroy
|
has_many :music_releases, dependent: :destroy
|
||||||
has_many :talent_releases, dependent: :destroy
|
has_many :talent_releases, dependent: :destroy
|
||||||
has_many :medical_releases, dependent: :destroy
|
|
||||||
has_many :misc_releases, dependent: :destroy
|
|
||||||
has_many :videos, dependent: :destroy
|
has_many :videos, dependent: :destroy
|
||||||
has_many :imports, dependent: :destroy
|
has_many :imports, dependent: :destroy
|
||||||
has_many :contract_templates, dependent: :destroy
|
has_many :contract_templates, dependent: :destroy
|
||||||
@@ -36,8 +34,6 @@ class Project < ApplicationRecord
|
|||||||
material_release: false,
|
material_release: false,
|
||||||
music_release: false,
|
music_release: false,
|
||||||
talent_release: false,
|
talent_release: false,
|
||||||
medical_release: false,
|
|
||||||
misc_release: false,
|
|
||||||
video_analysis: false,
|
video_analysis: false,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
@@ -70,8 +66,6 @@ class Project < ApplicationRecord
|
|||||||
material_release: true,
|
material_release: true,
|
||||||
music_release: true,
|
music_release: true,
|
||||||
talent_release: true,
|
talent_release: true,
|
||||||
medical_release: true,
|
|
||||||
misc_release: true,
|
|
||||||
video_analysis: true,
|
video_analysis: true,
|
||||||
}
|
}
|
||||||
when "nat_geo"
|
when "nat_geo"
|
||||||
@@ -83,8 +77,6 @@ class Project < ApplicationRecord
|
|||||||
material_release: true,
|
material_release: true,
|
||||||
music_release: true,
|
music_release: true,
|
||||||
talent_release: true,
|
talent_release: true,
|
||||||
medical_release: true,
|
|
||||||
misc_release: true,
|
|
||||||
video_analysis: true,
|
video_analysis: true,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -126,7 +118,7 @@ class Project < ApplicationRecord
|
|||||||
current_zoom_meeting = zoom_meetings.active.first
|
current_zoom_meeting = zoom_meetings.active.first
|
||||||
|
|
||||||
unless current_zoom_meeting.present?
|
unless current_zoom_meeting.present?
|
||||||
zoom_user = ZoomUser.for_new_meeting
|
zoom_user = ZoomUser.free.first || ZoomUser.create
|
||||||
current_zoom_meeting = ZoomMeeting.create(zoom_user: zoom_user, project: self)
|
current_zoom_meeting = ZoomMeeting.create(zoom_user: zoom_user, project: self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -10,19 +10,7 @@ class QrCode
|
|||||||
url = Rails.application.routes.url_helpers.url_for(route)
|
url = Rails.application.routes.url_helpers.url_for(route)
|
||||||
filename = [contract_template.project.name, contract_template.name].map(&:parameterize).join("_")
|
filename = [contract_template.project.name, contract_template.name].map(&:parameterize).join("_")
|
||||||
|
|
||||||
new(url, "#{filename}.png")
|
new(url, filename)
|
||||||
end
|
|
||||||
|
|
||||||
def self.build_from_multiple_contract_templates(contract_templates, project)
|
|
||||||
account = project.account
|
|
||||||
locale = I18n.locale
|
|
||||||
host = AppHost.new.domain_with_port
|
|
||||||
route = [account, project, :contract_templates, contract_template_ids: contract_templates.ids, locale: I18n.locale, host: AppHost.new.domain_with_port]
|
|
||||||
|
|
||||||
url = Rails.application.routes.url_helpers.url_for(route)
|
|
||||||
filename = [project.account.name, project.name].map(&:parameterize).join("_")
|
|
||||||
|
|
||||||
new(url, "#{filename}.png")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(url, filename = "qrcode.png")
|
def initialize(url, filename = "qrcode.png")
|
||||||
@@ -36,7 +24,7 @@ class QrCode
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_base64_png(width = 200, height = 200)
|
def to_base64_png(width = 100, height = 100)
|
||||||
_qr_code.as_png.resize(width, height).to_data_url
|
_qr_code.as_png.resize(width, height).to_data_url
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user