Compare commits
140 Commits
0.4.2
...
892a7ae35b
Author | SHA1 | Date | |
---|---|---|---|
892a7ae35b | |||
3586ef5788 | |||
436607a305 | |||
c7d36df842 | |||
8cb50d271b | |||
3dcd37bb8c | |||
8816441f94 | |||
73d9d6490a | |||
d151b1744e | |||
26d78a4f7f | |||
41505594be | |||
3f3945f9a0 | |||
1cb3a4356a | |||
34ac278a2e | |||
b7cfaa9f64 | |||
0df9cfecc8 | |||
27f0b33faa | |||
998f72f505 | |||
4ac33273b9 | |||
99e57d9747 | |||
1d257538fe | |||
62a3df034e | |||
df44524498 | |||
8d5dda3a7a | |||
74fac415c8 | |||
20cc8cd753 | |||
4647ef6e3e | |||
1a7757394e | |||
fbdc64de3c | |||
34a2d9e23b | |||
bc98ecb541 | |||
0f0281c58c | |||
c65012315d | |||
715f5f34c4 | |||
403965fe6f | |||
eec5b876a3 | |||
077455b4d3 | |||
7a995060ce | |||
9646e216aa | |||
5afbeb956b | |||
2895dcdab8 | |||
3dd71bf2c0 | |||
6fbaf433e8 | |||
4639ff7ffd | |||
4285e1952f | |||
eee7604440 | |||
0399c83646 | |||
2bc1abc7a7 | |||
06937b7443 | |||
6d281625b7 | |||
208240badc | |||
c479e3b995 | |||
517938ab7b | |||
b48ba012cb | |||
53648faff7 | |||
a993e09bc6 | |||
3aa4fbc5cf | |||
0caf2cb7c8 | |||
e49ad3fc9c | |||
146eb2b8ba | |||
360fe56a6d | |||
91cc94d3d7 | |||
2b9cd117ba | |||
36eb9d9667 | |||
d026173c8f | |||
7ecdfbf3e6 | |||
113ff6361b | |||
ca1a0eda29 | |||
dfb12d9be6 | |||
ea71314345 | |||
31be127d30 | |||
7c5ee54a44 | |||
21528a436e | |||
ffb99bcac6 | |||
a7f0e8fb02 | |||
eb405674dc | |||
342459daa3 | |||
cde0bbc7e6 | |||
aff262a535 | |||
0d927126a2 | |||
2f485f19c5 | |||
8b07bbe63f | |||
690ec3b509 | |||
7a9b95bf0d | |||
675a85dfb6 | |||
17f8ddba2e | |||
27cb58512e | |||
df2c826a33 | |||
6f33d59842 | |||
e37a41de2b | |||
c47df855bc | |||
af3b4727f1 | |||
011029d3b3 | |||
9af1d58de8 | |||
6d93242fa9 | |||
c9a843a35f | |||
c46bbc6ffd | |||
5d1844304a | |||
be45fd2d42 | |||
18a0846348 | |||
18e32335f5 | |||
b83f0b44b4 | |||
7f88d409f0 | |||
8841fd4d25 | |||
87241c1f87 | |||
2a1607c6d9 | |||
d8fd12a7b9 | |||
e4a04a254d | |||
88b5ce3d2e | |||
ae3976c7b8 | |||
f47ded38fa | |||
c63cae6b71 | |||
a7a96ab03c | |||
a6db6615df | |||
1c3370a784 | |||
59f4987371 | |||
c1e24593fa | |||
c98f028045 | |||
873f751795 | |||
6b9ff3a5e7 | |||
b24ba377d2 | |||
33168ecb62 | |||
3eacbc952f | |||
47ea8493ce | |||
eb6cfb89dd | |||
94e2635ee1 | |||
fa7516b03a | |||
bfa4f27cf7 | |||
36aff5564e | |||
e0260256fa | |||
fd47bee26a | |||
150cc6cfd1 | |||
44c948d22a | |||
99733415c8 | |||
5e127358b2 | |||
9a937e2d46 | |||
e45cbb6a76 | |||
ca04c3e259 | |||
658ba667b1 | |||
309a31e012 |
43
README.md
43
README.md
@ -1,33 +1,36 @@
|
||||
# OpenCase
|
||||
A simple, case-management-focused CRM for small altruistic organisations.
|
||||
|
||||
## Current Status
|
||||
**24 July 2018** A demo site, with basic functionality is available at demo.opencase.org.uk. If you are interested, raise an issue and I will get the login to you somehow.
|
||||
A simple case-management system
|
||||
|
||||
## The Plan
|
||||
OpenCase will be available as:
|
||||
* A Drupal module, on drupal.org
|
||||
* A Drupal install profile / distribution
|
||||
* A hosted service
|
||||
|
||||
### Features
|
||||
#### Existing
|
||||
* Completely configurable person types, case types and activity types
|
||||
* Search
|
||||
* Basic Reporting
|
||||
* Basic user roles (caseworker, volunteer co-ordinator, site admin etc) with access control
|
||||
|
||||
#### Coming soon
|
||||
* Better reporting (currently only reports on defaults fields and not user-added ones)
|
||||
* Allocation of tasks, overview of tasks and their stage of completion
|
||||
* Appointments and notifications
|
||||
|
||||
## Current Status
|
||||
**11 Nov 2018**
|
||||
### User Base
|
||||
OpenCase is being used by a couple of organisations, early adopters on the hosted platform.
|
||||
### Availability as Free Software
|
||||
If you want to install OpenCase for yourself, please get in touch via Issues. It is changing rapidly and the install process is currently undocumented but I am more than happy to guide you through.
|
||||
### Try it out
|
||||
A demo site, with basic functionality is available at demo.opencase.org.uk. If you are interested, raise an issue and I will get the login to you somehow.
|
||||
|
||||
## Find out more
|
||||
* More details, including user stories for future development, can be found in the [OpenCase Gitbook](https://hoegrammer.gitbooks.io/zen-crm/content/)
|
||||
* More details, including user stories for future development, can be found in the [OpenCase Gitbook](https://hoegrammer.gitbooks.io/opencase/content/)
|
||||
* Raise an issue to contact the developer.
|
||||
|
||||
## Differences between current version (v0.2.6, July 2018) and previous version ##
|
||||
|
||||
**Access control**: Previously everyone could see all cases. Now, users can see cases that they are involved in. By creating case you automatically become involve in it (although you can later be removed or remove yourself). Caseworkers can see all clients and volunteer co-ordinators can see all volunteers. Site admins and overseers can see everything.
|
||||
|
||||
**Editing types**: As a site admin you can now add, remove and configure types of actor, types of case and types of activity and you can configure fields on these and add your own fields.s
|
||||
|
||||
**Relations between types**: For each type of case, you can specify what types of actors (people) can be involved in it, e.g. for a volunteer recruitment case it would be volunteers and/or staff; for a legal advice case maybe clients, volunteers and solicitors. You can also specify what activities belong on what kinds of cases.
|
||||
|
||||
## Not done yet ##
|
||||
|
||||
* Reporting
|
||||
* Donations
|
||||
* Anything to do with emails/bounces
|
||||
* Any specific guidelines or features relating to the GDPR
|
||||
|
||||
|
||||
|
||||
|
5
ciac_opencase_customisations.libraries.yml
Normal file
5
ciac_opencase_customisations.libraries.yml
Normal file
@ -0,0 +1,5 @@
|
||||
ciac_grouped_views:
|
||||
version: 1.x
|
||||
css:
|
||||
layout:
|
||||
css/grouped_views.css: {}
|
@ -1,14 +1,17 @@
|
||||
{
|
||||
"name": "drupal/opencase",
|
||||
"name": "autonomic/opencase",
|
||||
"type": "drupal-module",
|
||||
"description": "Simple Case Management",
|
||||
"keywords": ["Drupal"],
|
||||
"license": "GPL-2.0+",
|
||||
"homepage": "https://www.drupal.org/project/opencase",
|
||||
"minimum-stability": "dev",
|
||||
"support": {
|
||||
"issues": "https://www.drupal.org/project/issues/opencase",
|
||||
"source": "http://cgit.drupalcode.org/opencase"
|
||||
},
|
||||
"require": { }
|
||||
"authors": [
|
||||
{
|
||||
"name": "autonomic",
|
||||
"email": "helo@autonomic.zone"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"composer/installers": "*",
|
||||
"drupal/superfish": "*",
|
||||
"drupal/views_autosubmit": "*",
|
||||
"drupal/smtp": "*",
|
||||
"drupal/paragraphs_collapsible": "*"
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,28 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- views.view.equal_opps_records
|
||||
module:
|
||||
- system
|
||||
- views
|
||||
theme:
|
||||
- bartik
|
||||
id: exposedformequal_opps_recordspage_1
|
||||
theme: bartik
|
||||
region: content
|
||||
weight: 0
|
||||
provider: null
|
||||
plugin: 'views_exposed_filter_block:equal_opps_records-page_1'
|
||||
settings:
|
||||
id: 'views_exposed_filter_block:equal_opps_records-page_1'
|
||||
label: ''
|
||||
provider: views
|
||||
label_display: visible
|
||||
views_label: 'Search by (whole) first or last name.'
|
||||
visibility:
|
||||
request_path:
|
||||
id: request_path
|
||||
pages: /equal-opps-records
|
||||
negate: false
|
||||
context_mapping: { }
|
@ -29,8 +29,8 @@ settings:
|
||||
slide: vertical
|
||||
supposition: 1
|
||||
hoverintent: 1
|
||||
touch: '0'
|
||||
touchbh: '2'
|
||||
touch: '1'
|
||||
touchbh: '1'
|
||||
touchbp: '768'
|
||||
touchua: '0'
|
||||
touchual: ''
|
||||
|
@ -1,19 +0,0 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- opencase
|
||||
theme:
|
||||
- bartik
|
||||
id: opencasecontextualmenu
|
||||
theme: bartik
|
||||
region: sidebar_second
|
||||
weight: -8
|
||||
provider: null
|
||||
plugin: opencase_contextual_menu
|
||||
settings:
|
||||
id: opencase_contextual_menu
|
||||
label: 'OpenCase Contextual Menu'
|
||||
provider: opencase
|
||||
label_display: '0'
|
||||
visibility: { }
|
852
config/install/views.view.contact_details_changes.yml
Normal file
852
config/install/views.view.contact_details_changes.yml
Normal file
@ -0,0 +1,852 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- opencase_entities
|
||||
- user
|
||||
id: contact_details_changes
|
||||
label: 'Contact Details History'
|
||||
module: views
|
||||
description: ''
|
||||
tag: ''
|
||||
base_table: oc_actor_field_revision
|
||||
base_field: vid
|
||||
display:
|
||||
default:
|
||||
display_plugin: default
|
||||
id: default
|
||||
display_title: Master
|
||||
position: 0
|
||||
display_options:
|
||||
access:
|
||||
type: perm
|
||||
options:
|
||||
perm: 'view published client entities'
|
||||
cache:
|
||||
type: tag
|
||||
options: { }
|
||||
query:
|
||||
type: views_query
|
||||
options:
|
||||
disable_sql_rewrite: false
|
||||
distinct: false
|
||||
replica: false
|
||||
query_comment: ''
|
||||
query_tags: { }
|
||||
exposed_form:
|
||||
type: basic
|
||||
options:
|
||||
submit_button: Apply
|
||||
reset_button: false
|
||||
reset_button_label: Reset
|
||||
exposed_sorts_label: 'Sort by'
|
||||
expose_sort_order: true
|
||||
sort_asc_label: Asc
|
||||
sort_desc_label: Desc
|
||||
pager:
|
||||
type: none
|
||||
options:
|
||||
offset: 0
|
||||
style:
|
||||
type: table
|
||||
options:
|
||||
grouping:
|
||||
1:
|
||||
field: view_oc_actor
|
||||
rendered: true
|
||||
rendered_strip: false
|
||||
row_class: ''
|
||||
default_row_class: true
|
||||
override: true
|
||||
sticky: false
|
||||
caption: ''
|
||||
summary: ''
|
||||
description: ''
|
||||
columns:
|
||||
first_name: first_name
|
||||
middle_names: middle_names
|
||||
last_name: last_name
|
||||
id: id
|
||||
revision_created: revision_created
|
||||
view_oc_actor: view_oc_actor
|
||||
info:
|
||||
first_name:
|
||||
sortable: false
|
||||
default_sort_order: asc
|
||||
align: ''
|
||||
separator: ''
|
||||
empty_column: false
|
||||
responsive: ''
|
||||
middle_names:
|
||||
sortable: false
|
||||
default_sort_order: asc
|
||||
align: ''
|
||||
separator: ''
|
||||
empty_column: false
|
||||
responsive: ''
|
||||
last_name:
|
||||
sortable: false
|
||||
default_sort_order: asc
|
||||
align: ''
|
||||
separator: ''
|
||||
empty_column: false
|
||||
responsive: ''
|
||||
id:
|
||||
sortable: false
|
||||
default_sort_order: asc
|
||||
align: ''
|
||||
separator: ''
|
||||
empty_column: false
|
||||
responsive: ''
|
||||
revision_created:
|
||||
sortable: false
|
||||
default_sort_order: asc
|
||||
align: ''
|
||||
separator: ''
|
||||
empty_column: false
|
||||
responsive: ''
|
||||
view_oc_actor:
|
||||
sortable: false
|
||||
default_sort_order: asc
|
||||
align: ''
|
||||
separator: ''
|
||||
empty_column: false
|
||||
responsive: ''
|
||||
default: '-1'
|
||||
empty_table: false
|
||||
row:
|
||||
type: fields
|
||||
options:
|
||||
inline: { }
|
||||
separator: ''
|
||||
hide_empty: false
|
||||
default_field_elements: true
|
||||
fields:
|
||||
revision_created:
|
||||
id: revision_created
|
||||
table: oc_actor_revision
|
||||
field: revision_created
|
||||
relationship: none
|
||||
group_type: min
|
||||
admin_label: ''
|
||||
label: Date
|
||||
exclude: false
|
||||
alter:
|
||||
alter_text: true
|
||||
text: '{{ revision_created | date(''d/m/Y'') }}'
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
set_precision: false
|
||||
precision: 0
|
||||
decimal: .
|
||||
separator: ''
|
||||
format_plural: 0
|
||||
format_plural_string: !!binary MQNAY291bnQ=
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
click_sort_column: value
|
||||
type: timestamp
|
||||
settings: { }
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
field_api_classes: false
|
||||
entity_type: oc_actor
|
||||
entity_field: revision_created
|
||||
plugin_id: field
|
||||
first_name:
|
||||
id: first_name
|
||||
table: oc_actor_field_revision
|
||||
field: first_name
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
label: 'First Name'
|
||||
exclude: false
|
||||
alter:
|
||||
alter_text: false
|
||||
text: ''
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
click_sort_column: value
|
||||
type: string
|
||||
settings:
|
||||
link_to_entity: false
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
separator: ', '
|
||||
field_api_classes: false
|
||||
entity_type: oc_actor
|
||||
entity_field: first_name
|
||||
plugin_id: field
|
||||
middle_names:
|
||||
id: middle_names
|
||||
table: oc_actor_field_revision
|
||||
field: middle_names
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
label: 'Middle Names'
|
||||
exclude: false
|
||||
alter:
|
||||
alter_text: false
|
||||
text: ''
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
click_sort_column: value
|
||||
type: string
|
||||
settings:
|
||||
link_to_entity: false
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
separator: ', '
|
||||
field_api_classes: false
|
||||
entity_type: oc_actor
|
||||
entity_field: middle_names
|
||||
plugin_id: field
|
||||
last_name:
|
||||
id: last_name
|
||||
table: oc_actor_field_revision
|
||||
field: last_name
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
label: 'Last Name'
|
||||
exclude: false
|
||||
alter:
|
||||
alter_text: false
|
||||
text: ''
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
click_sort_column: value
|
||||
type: string
|
||||
settings:
|
||||
link_to_entity: false
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
separator: ', '
|
||||
field_api_classes: false
|
||||
entity_type: oc_actor
|
||||
entity_field: last_name
|
||||
plugin_id: field
|
||||
email:
|
||||
id: email
|
||||
table: oc_actor_field_revision
|
||||
field: email
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
label: 'Email Address'
|
||||
exclude: false
|
||||
alter:
|
||||
alter_text: false
|
||||
text: ''
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
click_sort_column: value
|
||||
type: string
|
||||
settings:
|
||||
link_to_entity: false
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
separator: ', '
|
||||
field_api_classes: false
|
||||
entity_type: oc_actor
|
||||
entity_field: email
|
||||
plugin_id: field
|
||||
phone:
|
||||
id: phone
|
||||
table: oc_actor_field_revision
|
||||
field: phone
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
label: 'Main Phone Number'
|
||||
exclude: false
|
||||
alter:
|
||||
alter_text: false
|
||||
text: ''
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
click_sort_column: value
|
||||
type: string
|
||||
settings:
|
||||
link_to_entity: false
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
separator: ', '
|
||||
field_api_classes: false
|
||||
entity_type: oc_actor
|
||||
entity_field: phone
|
||||
plugin_id: field
|
||||
phone2:
|
||||
id: phone2
|
||||
table: oc_actor_field_revision
|
||||
field: phone2
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
label: 'Alternative Phone Number'
|
||||
exclude: false
|
||||
alter:
|
||||
alter_text: false
|
||||
text: ''
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
click_sort_column: value
|
||||
type: string
|
||||
settings:
|
||||
link_to_entity: false
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
separator: ', '
|
||||
field_api_classes: false
|
||||
entity_type: oc_actor
|
||||
entity_field: phone2
|
||||
plugin_id: field
|
||||
postal_address:
|
||||
id: postal_address
|
||||
table: oc_actor_field_revision
|
||||
field: postal_address
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
label: 'Postal Address'
|
||||
exclude: false
|
||||
alter:
|
||||
alter_text: false
|
||||
text: ''
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
click_sort_column: value
|
||||
type: basic_string
|
||||
settings: { }
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
separator: ', '
|
||||
field_api_classes: false
|
||||
entity_type: oc_actor
|
||||
entity_field: postal_address
|
||||
plugin_id: field
|
||||
post_code:
|
||||
id: post_code
|
||||
table: oc_actor_field_revision
|
||||
field: post_code
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
label: 'Post Code'
|
||||
exclude: false
|
||||
alter:
|
||||
alter_text: false
|
||||
text: ''
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
click_sort_column: value
|
||||
type: string
|
||||
settings:
|
||||
link_to_entity: false
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
separator: ', '
|
||||
field_api_classes: false
|
||||
entity_type: oc_actor
|
||||
entity_field: post_code
|
||||
plugin_id: field
|
||||
view_oc_actor:
|
||||
id: view_oc_actor
|
||||
table: oc_actor_field_revision
|
||||
field: view_oc_actor
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
label: ''
|
||||
exclude: true
|
||||
alter:
|
||||
alter_text: true
|
||||
text: "◀\tBack to current record"
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: false
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
text: 'See "rewrite results" (had to do it that way because contains HTML).'
|
||||
output_url_as_text: false
|
||||
absolute: false
|
||||
entity_type: oc_actor
|
||||
plugin_id: entity_link
|
||||
filters: { }
|
||||
sorts:
|
||||
revision_created:
|
||||
id: revision_created
|
||||
table: oc_actor_revision
|
||||
field: revision_created
|
||||
relationship: none
|
||||
group_type: min
|
||||
admin_label: ''
|
||||
order: DESC
|
||||
exposed: false
|
||||
expose:
|
||||
label: ''
|
||||
granularity: second
|
||||
entity_type: oc_actor
|
||||
entity_field: revision_created
|
||||
plugin_id: date
|
||||
header: { }
|
||||
footer: { }
|
||||
empty: { }
|
||||
relationships: { }
|
||||
arguments:
|
||||
id:
|
||||
id: id
|
||||
table: oc_actor_field_revision
|
||||
field: id
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
default_action: 'not found'
|
||||
exception:
|
||||
value: all
|
||||
title_enable: false
|
||||
title: All
|
||||
title_enable: false
|
||||
title: ''
|
||||
default_argument_type: fixed
|
||||
default_argument_options:
|
||||
argument: ''
|
||||
default_argument_skip_url: false
|
||||
summary_options:
|
||||
base_path: ''
|
||||
count: true
|
||||
items_per_page: 25
|
||||
override: false
|
||||
summary:
|
||||
sort_order: asc
|
||||
number_of_records: 0
|
||||
format: default_summary
|
||||
specify_validation: false
|
||||
validate:
|
||||
type: none
|
||||
fail: 'not found'
|
||||
validate_options: { }
|
||||
break_phrase: false
|
||||
not: false
|
||||
entity_type: oc_actor
|
||||
entity_field: id
|
||||
plugin_id: numeric
|
||||
display_extenders: { }
|
||||
group_by: true
|
||||
title: 'Contact Details History'
|
||||
cache_metadata:
|
||||
max-age: -1
|
||||
contexts:
|
||||
- 'languages:language_content'
|
||||
- 'languages:language_interface'
|
||||
- url
|
||||
- user.permissions
|
||||
tags: { }
|
||||
page_1:
|
||||
display_plugin: page
|
||||
id: page_1
|
||||
display_title: Page
|
||||
position: 1
|
||||
display_options:
|
||||
path: opencase/oc_actor/%/contact_details_history
|
||||
cache_metadata:
|
||||
max-age: -1
|
||||
contexts:
|
||||
- 'languages:language_content'
|
||||
- 'languages:language_interface'
|
||||
- url
|
||||
- user.permissions
|
||||
tags: { }
|
308
config/install/views.view.equal_opps_records.yml
Normal file
308
config/install/views.view.equal_opps_records.yml
Normal file
@ -0,0 +1,308 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- system.menu.opencase
|
||||
module:
|
||||
- opencase_entities
|
||||
- user
|
||||
- views_autosubmit
|
||||
id: equal_opps_records
|
||||
label: 'Equal Opps Records'
|
||||
module: views
|
||||
description: ''
|
||||
tag: ''
|
||||
base_table: oc_equal_opps
|
||||
base_field: id
|
||||
display:
|
||||
default:
|
||||
display_plugin: default
|
||||
id: default
|
||||
display_title: Master
|
||||
position: 0
|
||||
display_options:
|
||||
access:
|
||||
type: perm
|
||||
options:
|
||||
perm: 'view published equal opps entities'
|
||||
cache:
|
||||
type: tag
|
||||
options: { }
|
||||
query:
|
||||
type: views_query
|
||||
options:
|
||||
disable_sql_rewrite: false
|
||||
distinct: false
|
||||
replica: false
|
||||
query_comment: ''
|
||||
query_tags: { }
|
||||
exposed_form:
|
||||
type: autosubmit
|
||||
options:
|
||||
submit_button: Apply
|
||||
reset_button: false
|
||||
reset_button_label: Reset
|
||||
exposed_sorts_label: 'Sort by'
|
||||
expose_sort_order: true
|
||||
sort_asc_label: Asc
|
||||
sort_desc_label: Desc
|
||||
autosubmit_hide: true
|
||||
pager:
|
||||
type: mini
|
||||
options:
|
||||
items_per_page: 10
|
||||
offset: 0
|
||||
id: 0
|
||||
total_pages: null
|
||||
expose:
|
||||
items_per_page: false
|
||||
items_per_page_label: 'Items per page'
|
||||
items_per_page_options: '5, 10, 25, 50'
|
||||
items_per_page_options_all: false
|
||||
items_per_page_options_all_label: '- All -'
|
||||
offset: false
|
||||
offset_label: Offset
|
||||
tags:
|
||||
previous: ‹‹
|
||||
next: ››
|
||||
style:
|
||||
type: table
|
||||
row:
|
||||
type: fields
|
||||
fields:
|
||||
name:
|
||||
id: name
|
||||
table: oc_equal_opps
|
||||
field: name
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
label: Name
|
||||
exclude: false
|
||||
alter:
|
||||
alter_text: false
|
||||
text: ''
|
||||
make_link: false
|
||||
path: ''
|
||||
absolute: false
|
||||
external: false
|
||||
replace_spaces: false
|
||||
path_case: none
|
||||
trim_whitespace: false
|
||||
alt: ''
|
||||
rel: ''
|
||||
link_class: ''
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
target: ''
|
||||
nl2br: false
|
||||
max_length: 0
|
||||
word_boundary: true
|
||||
ellipsis: true
|
||||
more_link: false
|
||||
more_link_text: ''
|
||||
more_link_path: ''
|
||||
strip_tags: false
|
||||
trim: false
|
||||
preserve_tags: ''
|
||||
html: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
hide_alter_empty: true
|
||||
click_sort_column: value
|
||||
type: string
|
||||
settings:
|
||||
link_to_entity: true
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
separator: ', '
|
||||
field_api_classes: false
|
||||
entity_type: null
|
||||
entity_field: name
|
||||
plugin_id: field
|
||||
filters:
|
||||
status:
|
||||
value: '1'
|
||||
table: oc_equal_opps
|
||||
field: status
|
||||
plugin_id: boolean
|
||||
entity_type: oc_equal_opps
|
||||
entity_field: status
|
||||
id: status
|
||||
expose:
|
||||
operator: ''
|
||||
operator_limit_selection: false
|
||||
operator_list: { }
|
||||
group: 1
|
||||
first_name:
|
||||
id: first_name
|
||||
table: oc_actor_field_data
|
||||
field: first_name
|
||||
relationship: oc_actor
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
operator: '='
|
||||
value: ''
|
||||
group: 1
|
||||
exposed: true
|
||||
expose:
|
||||
operator_id: first_name_op
|
||||
label: 'First Name'
|
||||
description: ''
|
||||
use_operator: false
|
||||
operator: first_name_op
|
||||
operator_limit_selection: false
|
||||
operator_list: { }
|
||||
identifier: first_name
|
||||
required: false
|
||||
remember: false
|
||||
multiple: false
|
||||
remember_roles:
|
||||
authenticated: authenticated
|
||||
anonymous: '0'
|
||||
administrator: '0'
|
||||
gno_standard_user: '0'
|
||||
placeholder: ''
|
||||
is_grouped: false
|
||||
group_info:
|
||||
label: ''
|
||||
description: ''
|
||||
identifier: ''
|
||||
optional: true
|
||||
widget: select
|
||||
multiple: false
|
||||
remember: false
|
||||
default_group: All
|
||||
default_group_multiple: { }
|
||||
group_items: { }
|
||||
entity_type: oc_actor
|
||||
entity_field: first_name
|
||||
plugin_id: string
|
||||
last_name:
|
||||
id: last_name
|
||||
table: oc_actor_field_data
|
||||
field: last_name
|
||||
relationship: oc_actor
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
operator: '='
|
||||
value: ''
|
||||
group: 1
|
||||
exposed: true
|
||||
expose:
|
||||
operator_id: last_name_op
|
||||
label: 'Last Name'
|
||||
description: ''
|
||||
use_operator: false
|
||||
operator: last_name_op
|
||||
operator_limit_selection: false
|
||||
operator_list: { }
|
||||
identifier: last_name
|
||||
required: false
|
||||
remember: false
|
||||
multiple: false
|
||||
remember_roles:
|
||||
authenticated: authenticated
|
||||
anonymous: '0'
|
||||
administrator: '0'
|
||||
gno_standard_user: '0'
|
||||
placeholder: ''
|
||||
is_grouped: false
|
||||
group_info:
|
||||
label: ''
|
||||
description: ''
|
||||
identifier: ''
|
||||
optional: true
|
||||
widget: select
|
||||
multiple: false
|
||||
remember: false
|
||||
default_group: All
|
||||
default_group_multiple: { }
|
||||
group_items: { }
|
||||
entity_type: oc_actor
|
||||
entity_field: last_name
|
||||
plugin_id: string
|
||||
sorts: { }
|
||||
title: 'Equal Opps Records'
|
||||
header: { }
|
||||
footer: { }
|
||||
empty:
|
||||
area:
|
||||
id: area
|
||||
table: views
|
||||
field: area
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
empty: true
|
||||
tokenize: false
|
||||
content:
|
||||
value: 'There is no Equal Opps record by that name. Please check the spelling'
|
||||
format: basic_html
|
||||
plugin_id: text
|
||||
relationships:
|
||||
oc_actor:
|
||||
id: oc_actor
|
||||
table: oc_equal_opps
|
||||
field: oc_actor
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: Person
|
||||
required: true
|
||||
entity_type: oc_equal_opps
|
||||
entity_field: oc_actor
|
||||
plugin_id: standard
|
||||
arguments: { }
|
||||
display_extenders: { }
|
||||
use_ajax: true
|
||||
cache_metadata:
|
||||
max-age: -1
|
||||
contexts:
|
||||
- 'languages:language_content'
|
||||
- 'languages:language_interface'
|
||||
- url
|
||||
- url.query_args
|
||||
- user.permissions
|
||||
tags: { }
|
||||
page_1:
|
||||
display_plugin: page
|
||||
id: page_1
|
||||
display_title: Page
|
||||
position: 1
|
||||
display_options:
|
||||
display_extenders: { }
|
||||
path: equal-opps-records
|
||||
exposed_block: true
|
||||
menu:
|
||||
type: normal
|
||||
title: 'Equal Opps Records'
|
||||
description: ''
|
||||
expanded: false
|
||||
parent: opencase.see_all
|
||||
weight: 10
|
||||
context: '0'
|
||||
menu_name: opencase
|
||||
cache_metadata:
|
||||
max-age: -1
|
||||
contexts:
|
||||
- 'languages:language_content'
|
||||
- 'languages:language_interface'
|
||||
- url
|
||||
- url.query_args
|
||||
- user.permissions
|
||||
tags: { }
|
12
config/schema/oc_event.schema.yml
Normal file
12
config/schema/oc_event.schema.yml
Normal file
@ -0,0 +1,12 @@
|
||||
opencase.oc_event.*:
|
||||
type: config_entity
|
||||
label: 'Event config'
|
||||
mapping:
|
||||
id:
|
||||
type: string
|
||||
label: 'ID'
|
||||
label:
|
||||
type: label
|
||||
label: 'Label'
|
||||
uuid:
|
||||
type: string
|
@ -1,9 +1,45 @@
|
||||
/* MOVE THIS INTO MORE!! */
|
||||
.top_ups_bought.add-activity-link {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* */
|
||||
|
||||
body {
|
||||
font-size: 100% !important;
|
||||
}
|
||||
|
||||
.field--type-entity-reference-revisions .field__items {
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
.field--type-entity-reference-revisions .field__items .field{
|
||||
margin-top: 0;
|
||||
}
|
||||
.field--type-entity-reference-revisions .field__items .paragraph{
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
/* remove this confusing thing from user creation page */
|
||||
#edit-password-policy-status {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.form-composite > .fieldset-wrapper > .description, .form-item .description {
|
||||
font-size: 1em !important;
|
||||
}
|
||||
|
||||
div[data-drupal-selector=edit-user-bulk-form] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.layout-container {
|
||||
max-width: 95% !important;
|
||||
}
|
||||
|
||||
/* Free the people from the tyranny of the useless search button */
|
||||
#edit-submit-actor-search{
|
||||
#edit-submit-actor-search, #edit-submit-actor-search--2{
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -29,3 +65,61 @@ body {
|
||||
#block-exposedformactor-searchpage-1 .form-text {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
/* Make drop-down nav menu opaque */
|
||||
.block-superfish .menu ul {
|
||||
background: white;
|
||||
color: darkgray;
|
||||
}
|
||||
.block-superfish .menu ul li {
|
||||
border-bottom: 1px dotted darkgray;
|
||||
}
|
||||
.block-superfish .menu ul li a:hover {
|
||||
color: black;
|
||||
}
|
||||
|
||||
/* In views, display label at top of field. Ths is because full descriptions are displayed in the activity view so having the label in the middle means it disappears down the page. */
|
||||
td.views-field {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
/* Entity displays */
|
||||
.oc_entity .left {
|
||||
display: inline-block;
|
||||
width: 45%;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.oc_entity .right {
|
||||
display: inline-block;
|
||||
width: 45%;
|
||||
padding: 1em;
|
||||
float: right;
|
||||
}
|
||||
.oc_entity .field {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
/* Make entity reference field labels match normal field labels */
|
||||
.field--type-entity-reference .field__label {
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
font-size: 1em !important;
|
||||
font-weight: bold !important;
|
||||
}
|
||||
|
||||
/* Styling for grouped views */
|
||||
table.views-table.views-view-table caption {
|
||||
text-align: left;
|
||||
margin-bottom: 1em;
|
||||
margin-top: 2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* remove "details" accordion, see https://drupal.stackexchange.com/questions/294312/why-has-this-details-accordion-appeared-in-this-view */
|
||||
.views-table details {
|
||||
display: none;
|
||||
}
|
||||
|
||||
form.oc-organisation-relation-form tr:first-child {
|
||||
display: none;
|
||||
}
|
||||
|
67
docs/install.txt
Normal file
67
docs/install.txt
Normal file
@ -0,0 +1,67 @@
|
||||
|
||||
composer create-project drupal/recommended-project:8.9.8 drupal
|
||||
|
||||
# ADD THIS TO drupal/composer.json IN THE REPOSITORIES SECTION
|
||||
,{
|
||||
|
||||
"type": "vcs",
|
||||
"url": "https://git.autonomic.zone/autonomic-cooperative/opencase.git"
|
||||
}
|
||||
|
||||
|
||||
# INSTALL MODULES VIA COMPOSER (this will add them to composer.json, which is better than using a premade one, because this way the versions will all sort themselves out)
|
||||
composer require drupal/admin_toolbar drupal/security_review drupal/smtp drupal/opencase drupal/superfish
|
||||
|
||||
# CREATE DIRECTORIES AND SET UP FILE PERMISSIONS
|
||||
|
||||
# start in drupal directory
|
||||
mkdir -p config/sync
|
||||
mkdir private
|
||||
|
||||
# if web server user =/= deployment user:
|
||||
# start in drupal directory
|
||||
sudo chgrp www-data config/sync
|
||||
cd web
|
||||
cp sites/default/default.settings.php sites/default/settings.php
|
||||
sudo chgrp www-data . -R
|
||||
mkdir sites/default/files
|
||||
sudo chmod g+w sites/default/files -R
|
||||
chmod g+w sites/default/settings.php
|
||||
sudo find -type d -exec chmod g+s {} \;
|
||||
sudo chmod g-w sites/default/
|
||||
sudo chmod g-w sites
|
||||
sudo chmod g-w sites ./sites/example.settings.local.php ./sites/development.services.yml ./sites/example.sites.php ./sites/default/default.services.yml ./sites/default/default.settings.php ./autoload.php
|
||||
sudo chmod g-w -R modules/
|
||||
sudo chmod g-w -R core
|
||||
sudo chmod g-w profiles index.php update.php
|
||||
sudo chmod g-w themes -R
|
||||
sudo chmod g-w web.config robots.txt
|
||||
cd ../
|
||||
sudo chmod g-w -R web/modules
|
||||
sudo chgrp www-data private
|
||||
sudo chmod g+w,o-r,o-x private
|
||||
|
||||
|
||||
# INSTALL THE SITE
|
||||
|
||||
- Create a database
|
||||
- Go to the url and run the installer
|
||||
|
||||
# make settings file unwriteable now that it has been generated
|
||||
sudo chmod a-w sites/default/settings.php
|
||||
|
||||
# ENABLE all the above modules
|
||||
drush en admin_toolbar security_review smtp opencase -y
|
||||
|
||||
|
||||
# TODO set $trusted_host_patterns (in settings.php)
|
||||
# TODO private files (in settings.php)
|
||||
# TODO Set all the HTML roles to admin only - /admin/config/content/formats
|
||||
# TODO run security review (make eveything untrusted except CRM Admin and Admin) - /admin/config/security-review
|
||||
# TODO homepage -> /opencase/whatever-the-chosen-homepage, 403 - /user/login - /admin/config/system/site-information
|
||||
# TODO disable blocks: tools, main navigation, footer menu - /admin/structure/block
|
||||
# TODO logo & colours - admin/appearance/settings/bartik
|
||||
# TODO disallow registering an account & turn off personal contact forms - /admin/config/people/accounts
|
||||
# TODO add linked actor field to form display and display display - top of both
|
||||
# TODO change which contact form is the default - /admin/structure/contact
|
||||
# TODO change "short" date formate to d/m/Y - /admin/config/regional/date-time
|
@ -0,0 +1,12 @@
|
||||
opencase_cases.oc_actor_case_relation_type.*:
|
||||
type: config_entity
|
||||
label: 'Actor-Case Relation type config'
|
||||
mapping:
|
||||
id:
|
||||
type: string
|
||||
label: 'ID'
|
||||
label:
|
||||
type: label
|
||||
label: 'Label'
|
||||
uuid:
|
||||
type: string
|
@ -1,4 +1,4 @@
|
||||
opencase_entities.oc_case_type.*:
|
||||
opencase_cases.oc_case_type.*:
|
||||
type: config_entity
|
||||
label: 'Case type config'
|
||||
mapping:
|
30
modules/opencase_cases/oc_actor_case_relation.page.inc
Normal file
30
modules/opencase_cases/oc_actor_case_relation.page.inc
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains oc_actor_case_relation.page.inc.
|
||||
*
|
||||
* Page callback for Actor-Case Relation entities.
|
||||
*/
|
||||
|
||||
use Drupal\Core\Render\Element;
|
||||
|
||||
/**
|
||||
* Prepares variables for Actor-Case Relation templates.
|
||||
*
|
||||
* Default template: oc_actor_case_relation.html.twig.
|
||||
*
|
||||
* @param array $variables
|
||||
* An associative array containing:
|
||||
* - elements: An associative array containing the user information and any
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
*/
|
||||
function template_preprocess_oc_actor_case_relation(array &$variables) {
|
||||
// Fetch OCActorCaseRelation Entity Object.
|
||||
$oc_actor_case_relation = $variables['elements']['#oc_actor_case_relation'];
|
||||
|
||||
// Helpful $content variable for templates.
|
||||
foreach (Element::children($variables['elements']) as $key) {
|
||||
$variables['content'][$key] = $variables['elements'][$key];
|
||||
}
|
||||
}
|
37
modules/opencase_cases/oc_case.page.inc
Normal file
37
modules/opencase_cases/oc_case.page.inc
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains oc_case.page.inc.
|
||||
*
|
||||
* Page callback for Case entities.
|
||||
*/
|
||||
|
||||
use Drupal\Core\Render\Element;
|
||||
|
||||
/**
|
||||
* Prepares variables for Case templates.
|
||||
*
|
||||
* Default template: oc_case.html.twig.
|
||||
*
|
||||
* @param array $variables
|
||||
* An associative array containing:
|
||||
* - elements: An associative array containing the user information and any
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
*/
|
||||
function template_preprocess_oc_case(array &$variables) {
|
||||
// Separate the fields into two sections to be displayed in two columns.
|
||||
// Remove the name (title) field as this is displayed anyway.
|
||||
$variables['id'] = $variables['elements']['#oc_case']->get('id')[0]->get('value')->getValue();
|
||||
$variables['base_fields'] = array();
|
||||
$variables['other_fields'] = array();
|
||||
foreach (Element::children($variables['elements']) as $key) {
|
||||
$variables['content'][$key] = $variables['elements'][$key];
|
||||
if (in_array($key, ['created', 'changed', 'files', 'actors_involved', 'status', 'user_id'])) {
|
||||
$variables['base_fields'][$key] = $variables['elements'][$key];
|
||||
} else {
|
||||
$variables['other_fields'][$key] = $variables['elements'][$key];
|
||||
unset($variables['other_fields']['name']);
|
||||
}
|
||||
}
|
||||
}
|
10
modules/opencase_cases/opencase_cases.info.yml
Normal file
10
modules/opencase_cases/opencase_cases.info.yml
Normal file
@ -0,0 +1,10 @@
|
||||
name: 'Opencase Cases'
|
||||
type: module
|
||||
description: 'Provides case entities and a required field on activities linking them to a case.'
|
||||
core: 8.x
|
||||
package: OpenCase
|
||||
dependencies:
|
||||
0: opencase_entities
|
||||
1: datetime
|
||||
4: options
|
||||
6: user
|
22
modules/opencase_cases/opencase_cases.links.action.yml
Normal file
22
modules/opencase_cases/opencase_cases.links.action.yml
Normal file
@ -0,0 +1,22 @@
|
||||
|
||||
entity.oc_case.add_form:
|
||||
route_name: entity.oc_case.add_page
|
||||
title: 'Add Case'
|
||||
appears_on:
|
||||
- entity.oc_case.collection
|
||||
entity.oc_case_type.add_form:
|
||||
route_name: entity.oc_case_type.add_form
|
||||
title: 'Add Case type'
|
||||
appears_on:
|
||||
- entity.oc_case_type.collection
|
||||
|
||||
entity.oc_actor_case_relation.add_form:
|
||||
route_name: entity.oc_actor_case_relation.add_page
|
||||
title: 'Add Actor-Case Relation'
|
||||
appears_on:
|
||||
- entity.oc_actor_case_relation.collection
|
||||
entity.oc_actor_case_relation_type.add_form:
|
||||
route_name: entity.oc_actor_case_relation_type.add_form
|
||||
title: 'Add Actor-Case Relation type'
|
||||
appears_on:
|
||||
- entity.oc_actor_case_relation_type.collection
|
42
modules/opencase_cases/opencase_cases.links.menu.yml
Normal file
42
modules/opencase_cases/opencase_cases.links.menu.yml
Normal file
@ -0,0 +1,42 @@
|
||||
opencase_cases.manage_case_types:
|
||||
title: 'Manage case types'
|
||||
description: 'Configure types of cases and their fields'
|
||||
menu_name: opencase
|
||||
parent: opencase.opencase_admin_menu
|
||||
url: internal:/admin/opencase/oc_case_type
|
||||
weight: 2
|
||||
# Case menu items definition
|
||||
entity.oc_case.collection:
|
||||
title: 'Case list'
|
||||
route_name: entity.oc_case.collection
|
||||
description: 'List Case entities'
|
||||
parent: system.admin_structure
|
||||
weight: 100
|
||||
|
||||
|
||||
# Case type menu items definition
|
||||
entity.oc_case_type.collection:
|
||||
title: 'Case type'
|
||||
route_name: entity.oc_case_type.collection
|
||||
description: 'List Case type (bundles)'
|
||||
parent: system.admin_structure
|
||||
weight: 99
|
||||
|
||||
|
||||
|
||||
# Actor-Case Relation menu items definition
|
||||
entity.oc_actor_case_relation.collection:
|
||||
title: 'Actor-Case Relation list'
|
||||
route_name: entity.oc_actor_case_relation.collection
|
||||
description: 'List Actor-Case Relation entities'
|
||||
parent: system.admin_structure
|
||||
weight: 100
|
||||
|
||||
|
||||
# Actor-Case Relation type menu items definition
|
||||
entity.oc_actor_case_relation_type.collection:
|
||||
title: 'Actor-Case Relation type'
|
||||
route_name: entity.oc_actor_case_relation_type.collection
|
||||
description: 'List Actor-Case Relation type (bundles)'
|
||||
parent: system.admin_structure
|
||||
weight: 99
|
45
modules/opencase_cases/opencase_cases.links.task.yml
Normal file
45
modules/opencase_cases/opencase_cases.links.task.yml
Normal file
@ -0,0 +1,45 @@
|
||||
|
||||
# Case routing definition
|
||||
|
||||
entity.oc_case.canonical:
|
||||
route_name: entity.oc_case.canonical
|
||||
base_route: entity.oc_case.canonical
|
||||
title: 'View'
|
||||
|
||||
entity.oc_case.edit_form:
|
||||
route_name: entity.oc_case.edit_form
|
||||
base_route: entity.oc_case.canonical
|
||||
title: 'Edit'
|
||||
|
||||
entity.oc_case.version_history:
|
||||
route_name: entity.oc_case.version_history
|
||||
base_route: entity.oc_case.canonical
|
||||
title: 'Revisions'
|
||||
|
||||
entity.oc_case.delete_form:
|
||||
route_name: entity.oc_case.delete_form
|
||||
base_route: entity.oc_case.canonical
|
||||
title: Delete
|
||||
weight: 10
|
||||
# Actor-Case Relation routing definition
|
||||
|
||||
entity.oc_actor_case_relation.canonical:
|
||||
route_name: entity.oc_actor_case_relation.canonical
|
||||
base_route: entity.oc_actor_case_relation.canonical
|
||||
title: 'View'
|
||||
|
||||
entity.oc_actor_case_relation.edit_form:
|
||||
route_name: entity.oc_actor_case_relation.edit_form
|
||||
base_route: entity.oc_actor_case_relation.canonical
|
||||
title: 'Edit'
|
||||
|
||||
entity.oc_actor_case_relation.version_history:
|
||||
route_name: entity.oc_actor_case_relation.version_history
|
||||
base_route: entity.oc_actor_case_relation.canonical
|
||||
title: 'Revisions'
|
||||
|
||||
entity.oc_actor_case_relation.delete_form:
|
||||
route_name: entity.oc_actor_case_relation.delete_form
|
||||
base_route: entity.oc_actor_case_relation.canonical
|
||||
title: Delete
|
||||
weight: 10
|
165
modules/opencase_cases/opencase_cases.module
Normal file
165
modules/opencase_cases/opencase_cases.module
Normal file
@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains opencase_cases.module.
|
||||
*/
|
||||
|
||||
use Drupal\Core\Routing\RouteMatchInterface;
|
||||
|
||||
/**
|
||||
* Implements hook_help().
|
||||
*/
|
||||
function opencase_cases_help($route_name, RouteMatchInterface $route_match) {
|
||||
switch ($route_name) {
|
||||
// Main module help for the opencase_cases module.
|
||||
case 'help.page.opencase_cases':
|
||||
$output = '';
|
||||
$output .= '<h3>' . t('About') . '</h3>';
|
||||
$output .= '<p>' . t('Provides case entities and a required field on activities linking them to a case.') . '</p>';
|
||||
return $output;
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_theme().
|
||||
*/
|
||||
function opencase_cases_theme() {
|
||||
return [
|
||||
'opencase_cases' => [
|
||||
'render element' => 'children',
|
||||
],
|
||||
'oc_case' => [
|
||||
'render element' => 'elements',
|
||||
'file' => 'oc_case.page.inc',
|
||||
'template' => 'oc_case',
|
||||
],
|
||||
'oc_case_content_add_list' => [
|
||||
'render element' => 'content',
|
||||
'variables' => ['content' => NULL],
|
||||
'file' => 'oc_case.page.inc',
|
||||
],
|
||||
'oc_actor_case_relation' => [
|
||||
'render element' => 'elements',
|
||||
'file' => 'oc_actor_case_relation.page.inc',
|
||||
'template' => 'oc_actor_case_relation',
|
||||
],
|
||||
'oc_actor_case_relation_content_add_list' => [
|
||||
'render element' => 'content',
|
||||
'variables' => ['content' => NULL],
|
||||
'file' => 'oc_actor_case_relation.page.inc',
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
function opencase_cases_entity_base_field_info($entity_type) {
|
||||
$fields = array();
|
||||
|
||||
// Add Case field to Activity
|
||||
if ($entity_type->id() === 'oc_activity') {
|
||||
$fields['oc_case'] = \Drupal\Core\Field\BaseFieldDefinition::create('entity_reference')
|
||||
->setLabel(t('Case'))
|
||||
->setDescription(t('The case this activity belongs to.'))
|
||||
->setSetting('target_type', 'oc_case')
|
||||
->setSetting('handler', 'default')
|
||||
->setTranslatable(TRUE)
|
||||
->setCardinality(1)
|
||||
->setDefaultValueCallback('opencase_cases_default_activity_case_value')
|
||||
->setDisplayOptions('view', [
|
||||
'type' => 'string',
|
||||
'weight' => -3,
|
||||
])
|
||||
->setRequired(TRUE);
|
||||
}
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* When creating an activity, it sets the case id from the URL.
|
||||
*/
|
||||
function opencase_cases_default_activity_case_value() {
|
||||
return array(\Drupal::request()->query->get('case_id'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of hook_form_alter()
|
||||
* Changes what page is redirected to after deleting things
|
||||
*/
|
||||
function opencase_cases_form_alter(&$form, &$form_state, $form_id) {
|
||||
if (preg_match('/oc_actor_.*_delete_form/', $form_id) or (preg_match('/oc_case_.*_delete_form/', $form_id)) or (preg_match('/oc_organisation_.*_delete_form/', $form_id))) {
|
||||
$form['actions']['submit']['#submit'][] = '_opencase_cases_redirect_to_home';
|
||||
$form['actions']['cancel']['#url'] = $form_state->getFormObject()->getEntity()->toUrl();
|
||||
}
|
||||
if (preg_match('/oc_activity_.*_delete_form/', $form_id)) {
|
||||
$form['actions']['submit']['#submit'][] = '_opencase_cases_delete_activity_redirect';
|
||||
$form['actions']['cancel']['#url'] = $form_state->getFormObject()->getEntity()->toUrl();
|
||||
}
|
||||
}
|
||||
|
||||
function _opencase_cases_redirect_to_home($form, &$form_state) {
|
||||
$form_state->setRedirect('<front>');
|
||||
}
|
||||
function _opencase_cases_delete_activity_redirect($form, &$form_state) {
|
||||
$case_id = $form_state->getFormObject()->getEntity()->oc_case->target_id;
|
||||
$form_state->setRedirect('entity.oc_case.canonical', ['oc_case' => $case_id]);
|
||||
}
|
||||
/**
|
||||
* Implements hook_theme_suggestions_HOOK().
|
||||
*/
|
||||
function opencase_cases_theme_suggestions_oc_case(array $variables) {
|
||||
$suggestions = [];
|
||||
$entity = $variables['elements']['#oc_case'];
|
||||
$sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_');
|
||||
|
||||
$suggestions[] = 'oc_case__' . $sanitized_view_mode;
|
||||
$suggestions[] = 'oc_case__' . $entity->bundle();
|
||||
$suggestions[] = 'oc_case__' . $entity->bundle() . '__' . $sanitized_view_mode;
|
||||
$suggestions[] = 'oc_case__' . $entity->id();
|
||||
$suggestions[] = 'oc_case__' . $entity->id() . '__' . $sanitized_view_mode;
|
||||
return $suggestions;
|
||||
}
|
||||
|
||||
//function opencase_views_query_alter(Drupal\views\ViewExecutable $view, $query) {
|
||||
// if ($view->getBaseEntityType() && $view->getBaseEntityType()->id() == 'oc_case') {
|
||||
// $query->addTag('oc_case_access');
|
||||
// }
|
||||
// if ($view->getBaseEntityType() && $view->getBaseEntityType()->id() == 'oc_activity') {
|
||||
// $query->addTag('oc_activity_access');
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//function opencase_query_oc_case_access_alter($query) {
|
||||
// if (\Drupal::currentUser()->hasPermission('view published case entities')) {
|
||||
// return;
|
||||
// }
|
||||
// $linked_actor_id = CaseInvolvement::getLinkedActorId(\Drupal::currentUser());
|
||||
// $query->addJoin('INNER', 'oc_case__actors_involved', 'access_filter', 'access_filter.entity_id = oc_case_field_data.id');
|
||||
// $query->condition('access_filter.actors_involved_target_id', $linked_actor_id);
|
||||
//}
|
||||
//
|
||||
//function opencase_query_oc_activity_access_alter($query) {
|
||||
// if (\Drupal::currentUser()->hasPermission('view published case entities')) {
|
||||
// return;
|
||||
// }
|
||||
// $linked_actor_id = CaseInvolvement::getLinkedActorId(\Drupal::currentUser());
|
||||
// $query->addJoin('INNER', 'oc_case__actors_involved', 'access_filter', 'access_filter.entity_id = oc_activity_field_data.oc_case');
|
||||
// $query->condition('access_filter.actors_involved_target_id', $linked_actor_id);
|
||||
//}
|
||||
|
||||
/**
|
||||
* Implements hook_theme_suggestions_HOOK().
|
||||
*/
|
||||
function opencase_cases_theme_suggestions_oc_actor_case_relation(array $variables) {
|
||||
$suggestions = [];
|
||||
$entity = $variables['elements']['#oc_actor_case_relation'];
|
||||
$sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_');
|
||||
|
||||
$suggestions[] = 'oc_actor_case_relation__' . $sanitized_view_mode;
|
||||
$suggestions[] = 'oc_actor_case_relation__' . $entity->bundle();
|
||||
$suggestions[] = 'oc_actor_case_relation__' . $entity->bundle() . '__' . $sanitized_view_mode;
|
||||
$suggestions[] = 'oc_actor_case_relation__' . $entity->id();
|
||||
$suggestions[] = 'oc_actor_case_relation__' . $entity->id() . '__' . $sanitized_view_mode;
|
||||
return $suggestions;
|
||||
}
|
33
modules/opencase_cases/opencase_cases.permissions.yml
Normal file
33
modules/opencase_cases/opencase_cases.permissions.yml
Normal file
@ -0,0 +1,33 @@
|
||||
add actor-case relation entities:
|
||||
title: 'Create new Actor-Case Relation entities'
|
||||
|
||||
administer actor-case relation entities:
|
||||
title: 'Administer Actor-Case Relation entities'
|
||||
description: 'Allow to access the administration form to configure Actor-Case Relation entities.'
|
||||
restrict access: true
|
||||
|
||||
delete actor-case relation entities:
|
||||
title: 'Delete Actor-Case Relation entities'
|
||||
|
||||
edit actor-case relation entities:
|
||||
title: 'Edit Actor-Case Relation entities'
|
||||
|
||||
view published actor-case relation entities:
|
||||
title: 'View published Actor-Case Relation entities'
|
||||
|
||||
view unpublished actor-case relation entities:
|
||||
title: 'View unpublished Actor-Case Relation entities'
|
||||
|
||||
view all actor-case relation revisions:
|
||||
title: 'View all Actor-Case Relation revisions'
|
||||
|
||||
revert all actor-case relation revisions:
|
||||
title: 'Revert all Actor-Case Relation revisions'
|
||||
description: 'Role requires permission <em>view Actor-Case Relation revisions</em> and <em>edit rights</em> for actor-case relation entities in question or <em>administer actor-case relation entities</em>.'
|
||||
|
||||
delete all actor-case relation revisions:
|
||||
title: 'Delete all revisions'
|
||||
description: 'Role requires permission to <em>view Actor-Case Relation revisions</em> and <em>delete rights</em> for actor-case relation entities in question or <em>administer actor-case relation entities</em>.'
|
||||
|
||||
permission_callbacks:
|
||||
- \Drupal\opencase_cases\OCActorCaseRelationPermissions::generatePermissions
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities;
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
class CaseInvolvement {
|
||||
|
@ -0,0 +1,209 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Controller;
|
||||
|
||||
use Drupal\Component\Utility\Xss;
|
||||
use Drupal\Core\Controller\ControllerBase;
|
||||
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\opencase_cases\Entity\OCActorCaseRelationInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Class OCActorCaseRelationController.
|
||||
*
|
||||
* Returns responses for Actor-Case Relation routes.
|
||||
*/
|
||||
class OCActorCaseRelationController extends ControllerBase implements ContainerInjectionInterface {
|
||||
|
||||
/**
|
||||
* The date formatter.
|
||||
*
|
||||
* @var \Drupal\Core\Datetime\DateFormatter
|
||||
*/
|
||||
protected $dateFormatter;
|
||||
|
||||
/**
|
||||
* The renderer.
|
||||
*
|
||||
* @var \Drupal\Core\Render\Renderer
|
||||
*/
|
||||
protected $renderer;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container) {
|
||||
$instance = parent::create($container);
|
||||
$instance->dateFormatter = $container->get('date.formatter');
|
||||
$instance->renderer = $container->get('renderer');
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a Actor-Case Relation revision.
|
||||
*
|
||||
* @param int $oc_actor_case_relation_revision
|
||||
* The Actor-Case Relation revision ID.
|
||||
*
|
||||
* @return array
|
||||
* An array suitable for drupal_render().
|
||||
*/
|
||||
public function revisionShow($oc_actor_case_relation_revision) {
|
||||
$oc_actor_case_relation = $this->entityTypeManager()->getStorage('oc_actor_case_relation')
|
||||
->loadRevision($oc_actor_case_relation_revision);
|
||||
$view_builder = $this->entityTypeManager()->getViewBuilder('oc_actor_case_relation');
|
||||
|
||||
return $view_builder->view($oc_actor_case_relation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Page title callback for a Actor-Case Relation revision.
|
||||
*
|
||||
* @param int $oc_actor_case_relation_revision
|
||||
* The Actor-Case Relation revision ID.
|
||||
*
|
||||
* @return string
|
||||
* The page title.
|
||||
*/
|
||||
public function revisionPageTitle($oc_actor_case_relation_revision) {
|
||||
$oc_actor_case_relation = $this->entityTypeManager()->getStorage('oc_actor_case_relation')
|
||||
->loadRevision($oc_actor_case_relation_revision);
|
||||
return $this->t('Revision of %title from %date', [
|
||||
'%title' => $oc_actor_case_relation->label(),
|
||||
'%date' => $this->dateFormatter->format($oc_actor_case_relation->getRevisionCreationTime()),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates an overview table of older revisions of a Actor-Case Relation.
|
||||
*
|
||||
* @param \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface $oc_actor_case_relation
|
||||
* A Actor-Case Relation object.
|
||||
*
|
||||
* @return array
|
||||
* An array as expected by drupal_render().
|
||||
*/
|
||||
public function revisionOverview(OCActorCaseRelationInterface $oc_actor_case_relation) {
|
||||
$account = $this->currentUser();
|
||||
$oc_actor_case_relation_storage = $this->entityTypeManager()->getStorage('oc_actor_case_relation');
|
||||
|
||||
$langcode = $oc_actor_case_relation->language()->getId();
|
||||
$langname = $oc_actor_case_relation->language()->getName();
|
||||
$languages = $oc_actor_case_relation->getTranslationLanguages();
|
||||
$has_translations = (count($languages) > 1);
|
||||
$build['#title'] = $has_translations ? $this->t('@langname revisions for %title', ['@langname' => $langname, '%title' => $oc_actor_case_relation->label()]) : $this->t('Revisions for %title', ['%title' => $oc_actor_case_relation->label()]);
|
||||
|
||||
$header = [$this->t('Revision'), $this->t('Operations')];
|
||||
$revert_permission = (($account->hasPermission("revert all actor-case relation revisions") || $account->hasPermission('administer actor-case relation entities')));
|
||||
$delete_permission = (($account->hasPermission("delete all actor-case relation revisions") || $account->hasPermission('administer actor-case relation entities')));
|
||||
|
||||
$rows = [];
|
||||
|
||||
$vids = $oc_actor_case_relation_storage->revisionIds($oc_actor_case_relation);
|
||||
|
||||
$latest_revision = TRUE;
|
||||
|
||||
foreach (array_reverse($vids) as $vid) {
|
||||
/** @var \Drupal\opencase_cases\OCActorCaseRelationInterface $revision */
|
||||
$revision = $oc_actor_case_relation_storage->loadRevision($vid);
|
||||
// Only show revisions that are affected by the language that is being
|
||||
// displayed.
|
||||
if ($revision->hasTranslation($langcode) && $revision->getTranslation($langcode)->isRevisionTranslationAffected()) {
|
||||
$username = [
|
||||
'#theme' => 'username',
|
||||
'#account' => $revision->getRevisionUser(),
|
||||
];
|
||||
|
||||
// Use revision link to link to revisions that are not active.
|
||||
$date = $this->dateFormatter->format($revision->getRevisionCreationTime(), 'short');
|
||||
if ($vid != $oc_actor_case_relation->getRevisionId()) {
|
||||
$link = $this->l($date, new Url('entity.oc_actor_case_relation.revision', [
|
||||
'oc_actor_case_relation' => $oc_actor_case_relation->id(),
|
||||
'oc_actor_case_relation_revision' => $vid,
|
||||
]));
|
||||
}
|
||||
else {
|
||||
$link = $oc_actor_case_relation->link($date);
|
||||
}
|
||||
|
||||
$row = [];
|
||||
$column = [
|
||||
'data' => [
|
||||
'#type' => 'inline_template',
|
||||
'#template' => '{% trans %}{{ date }} by {{ username }}{% endtrans %}{% if message %}<p class="revision-log">{{ message }}</p>{% endif %}',
|
||||
'#context' => [
|
||||
'date' => $link,
|
||||
'username' => $this->renderer->renderPlain($username),
|
||||
'message' => [
|
||||
'#markup' => $revision->getRevisionLogMessage(),
|
||||
'#allowed_tags' => Xss::getHtmlTagList(),
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
$row[] = $column;
|
||||
|
||||
if ($latest_revision) {
|
||||
$row[] = [
|
||||
'data' => [
|
||||
'#prefix' => '<em>',
|
||||
'#markup' => $this->t('Current revision'),
|
||||
'#suffix' => '</em>',
|
||||
],
|
||||
];
|
||||
foreach ($row as &$current) {
|
||||
$current['class'] = ['revision-current'];
|
||||
}
|
||||
$latest_revision = FALSE;
|
||||
}
|
||||
else {
|
||||
$links = [];
|
||||
if ($revert_permission) {
|
||||
$links['revert'] = [
|
||||
'title' => $this->t('Revert'),
|
||||
'url' => $has_translations ?
|
||||
Url::fromRoute('entity.oc_actor_case_relation.translation_revert', [
|
||||
'oc_actor_case_relation' => $oc_actor_case_relation->id(),
|
||||
'oc_actor_case_relation_revision' => $vid,
|
||||
'langcode' => $langcode,
|
||||
]) :
|
||||
Url::fromRoute('entity.oc_actor_case_relation.revision_revert', [
|
||||
'oc_actor_case_relation' => $oc_actor_case_relation->id(),
|
||||
'oc_actor_case_relation_revision' => $vid,
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
if ($delete_permission) {
|
||||
$links['delete'] = [
|
||||
'title' => $this->t('Delete'),
|
||||
'url' => Url::fromRoute('entity.oc_actor_case_relation.revision_delete', [
|
||||
'oc_actor_case_relation' => $oc_actor_case_relation->id(),
|
||||
'oc_actor_case_relation_revision' => $vid,
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
$row[] = [
|
||||
'data' => [
|
||||
'#type' => 'operations',
|
||||
'#links' => $links,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
$rows[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
$build['oc_actor_case_relation_revisions_table'] = [
|
||||
'#theme' => 'table',
|
||||
'#rows' => $rows,
|
||||
'#header' => $header,
|
||||
];
|
||||
|
||||
return $build;
|
||||
}
|
||||
|
||||
}
|
@ -1,12 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Controller;
|
||||
namespace Drupal\opencase_cases\Controller;
|
||||
|
||||
use Drupal\Component\Utility\Xss;
|
||||
use Drupal\Core\Controller\ControllerBase;
|
||||
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\opencase_entities\Entity\OCCaseInterface;
|
||||
use Drupal\opencase_cases\Entity\OCCaseInterface;
|
||||
|
||||
/**
|
||||
* Class OCCaseController.
|
||||
@ -48,7 +48,7 @@ class OCCaseController extends ControllerBase implements ContainerInjectionInter
|
||||
/**
|
||||
* Generates an overview table of older revisions of a Case .
|
||||
*
|
||||
* @param \Drupal\opencase_entities\Entity\OCCaseInterface $oc_case
|
||||
* @param \Drupal\opencase_cases\Entity\OCCaseInterface $oc_case
|
||||
* A Case object.
|
||||
*
|
||||
* @return array
|
||||
@ -75,7 +75,7 @@ class OCCaseController extends ControllerBase implements ContainerInjectionInter
|
||||
$latest_revision = TRUE;
|
||||
|
||||
foreach (array_reverse($vids) as $vid) {
|
||||
/** @var \Drupal\opencase_entities\OCCaseInterface $revision */
|
||||
/** @var \Drupal\opencase_cases\OCCaseInterface $revision */
|
||||
$revision = $oc_case_storage->loadRevision($vid);
|
||||
// Only show revisions that are affected by the language that is being
|
||||
// displayed.
|
268
modules/opencase_cases/src/Entity/OCActorCaseRelation.php
Normal file
268
modules/opencase_cases/src/Entity/OCActorCaseRelation.php
Normal file
@ -0,0 +1,268 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Entity;
|
||||
|
||||
use Drupal\Core\Entity\EntityStorageInterface;
|
||||
use Drupal\Core\Field\BaseFieldDefinition;
|
||||
use Drupal\Core\Entity\EditorialContentEntityBase;
|
||||
use Drupal\Core\Entity\RevisionableInterface;
|
||||
use Drupal\Core\Entity\EntityChangedTrait;
|
||||
use Drupal\Core\Entity\EntityPublishedTrait;
|
||||
use Drupal\Core\Entity\EntityTypeInterface;
|
||||
use Drupal\user\UserInterface;
|
||||
|
||||
/**
|
||||
* Defines the Actor-Case Relation entity.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*
|
||||
* @ContentEntityType(
|
||||
* id = "oc_actor_case_relation",
|
||||
* label = @Translation("Actor-Case Relation"),
|
||||
* bundle_label = @Translation("Actor-Case Relation type"),
|
||||
* handlers = {
|
||||
* "storage" = "Drupal\opencase_cases\OCActorCaseRelationStorage",
|
||||
* "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
|
||||
* "list_builder" = "Drupal\opencase_cases\OCActorCaseRelationListBuilder",
|
||||
* "views_data" = "Drupal\opencase_cases\Entity\OCActorCaseRelationViewsData",
|
||||
* "translation" = "Drupal\opencase_cases\OCActorCaseRelationTranslationHandler",
|
||||
*
|
||||
* "form" = {
|
||||
* "default" = "Drupal\opencase_cases\Form\OCActorCaseRelationForm",
|
||||
* "add" = "Drupal\opencase_cases\Form\OCActorCaseRelationForm",
|
||||
* "edit" = "Drupal\opencase_cases\Form\OCActorCaseRelationForm",
|
||||
* "delete" = "Drupal\opencase_cases\Form\OCActorCaseRelationDeleteForm",
|
||||
* },
|
||||
* "route_provider" = {
|
||||
* "html" = "Drupal\opencase_cases\OCActorCaseRelationHtmlRouteProvider",
|
||||
* },
|
||||
* "access" = "Drupal\opencase_cases\OCActorCaseRelationAccessControlHandler",
|
||||
* },
|
||||
* base_table = "oc_actor_case_relation",
|
||||
* data_table = "oc_actor_case_relation_field_data",
|
||||
* revision_table = "oc_actor_case_relation_revision",
|
||||
* revision_data_table = "oc_actor_case_relation_field_revision",
|
||||
* translatable = TRUE,
|
||||
* permission_granularity = "bundle",
|
||||
* admin_permission = "administer actor-case relation entities",
|
||||
* entity_keys = {
|
||||
* "id" = "id",
|
||||
* "revision" = "vid",
|
||||
* "bundle" = "type",
|
||||
* "label" = "name",
|
||||
* "uuid" = "uuid",
|
||||
* "uid" = "user_id",
|
||||
* "langcode" = "langcode",
|
||||
* "published" = "status",
|
||||
* },
|
||||
* links = {
|
||||
* "canonical" = "/admin/structure/oc_actor_case_relation/{oc_actor_case_relation}",
|
||||
* "add-page" = "/admin/structure/oc_actor_case_relation/add",
|
||||
* "add-form" = "/admin/structure/oc_actor_case_relation/add/{oc_actor_case_relation_type}",
|
||||
* "edit-form" = "/admin/structure/oc_actor_case_relation/{oc_actor_case_relation}/edit",
|
||||
* "delete-form" = "/admin/structure/oc_actor_case_relation/{oc_actor_case_relation}/delete",
|
||||
* "version-history" = "/admin/structure/oc_actor_case_relation/{oc_actor_case_relation}/revisions",
|
||||
* "revision" = "/admin/structure/oc_actor_case_relation/{oc_actor_case_relation}/revisions/{oc_actor_case_relation_revision}/view",
|
||||
* "revision_revert" = "/admin/structure/oc_actor_case_relation/{oc_actor_case_relation}/revisions/{oc_actor_case_relation_revision}/revert",
|
||||
* "revision_delete" = "/admin/structure/oc_actor_case_relation/{oc_actor_case_relation}/revisions/{oc_actor_case_relation_revision}/delete",
|
||||
* "translation_revert" = "/admin/structure/oc_actor_case_relation/{oc_actor_case_relation}/revisions/{oc_actor_case_relation_revision}/revert/{langcode}",
|
||||
* "collection" = "/admin/structure/oc_actor_case_relation",
|
||||
* },
|
||||
* bundle_entity_type = "oc_actor_case_relation_type",
|
||||
* field_ui_base_route = "entity.oc_actor_case_relation_type.edit_form"
|
||||
* )
|
||||
*/
|
||||
class OCActorCaseRelation extends EditorialContentEntityBase implements OCActorCaseRelationInterface {
|
||||
|
||||
use EntityChangedTrait;
|
||||
use EntityPublishedTrait;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function preCreate(EntityStorageInterface $storage_controller, array &$values) {
|
||||
parent::preCreate($storage_controller, $values);
|
||||
$values += [
|
||||
'user_id' => \Drupal::currentUser()->id(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function urlRouteParameters($rel) {
|
||||
$uri_route_parameters = parent::urlRouteParameters($rel);
|
||||
|
||||
if ($rel === 'revision_revert' && $this instanceof RevisionableInterface) {
|
||||
$uri_route_parameters[$this->getEntityTypeId() . '_revision'] = $this->getRevisionId();
|
||||
}
|
||||
elseif ($rel === 'revision_delete' && $this instanceof RevisionableInterface) {
|
||||
$uri_route_parameters[$this->getEntityTypeId() . '_revision'] = $this->getRevisionId();
|
||||
}
|
||||
|
||||
return $uri_route_parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function preSave(EntityStorageInterface $storage) {
|
||||
parent::preSave($storage);
|
||||
|
||||
foreach (array_keys($this->getTranslationLanguages()) as $langcode) {
|
||||
$translation = $this->getTranslation($langcode);
|
||||
|
||||
// If no owner has been set explicitly, make the anonymous user the owner.
|
||||
if (!$translation->getOwner()) {
|
||||
$translation->setOwnerId(0);
|
||||
}
|
||||
}
|
||||
|
||||
// If no revision author has been set explicitly,
|
||||
// make the oc_actor_case_relation owner the revision author.
|
||||
if (!$this->getRevisionUser()) {
|
||||
$this->setRevisionUserId($this->getOwnerId());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getName() {
|
||||
return $this->get('name')->value;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setName($name) {
|
||||
$this->set('name', $name);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCreatedTime() {
|
||||
return $this->get('created')->value;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setCreatedTime($timestamp) {
|
||||
$this->set('created', $timestamp);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getOwner() {
|
||||
return $this->get('user_id')->entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getOwnerId() {
|
||||
return $this->get('user_id')->target_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setOwnerId($uid) {
|
||||
$this->set('user_id', $uid);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setOwner(UserInterface $account) {
|
||||
$this->set('user_id', $account->id());
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
|
||||
$fields = parent::baseFieldDefinitions($entity_type);
|
||||
|
||||
// Add the published field.
|
||||
$fields += static::publishedBaseFieldDefinitions($entity_type);
|
||||
|
||||
$fields['user_id'] = BaseFieldDefinition::create('entity_reference')
|
||||
->setLabel(t('Authored by'))
|
||||
->setDescription(t('The user ID of author of the Actor-Case Relation entity.'))
|
||||
->setRevisionable(TRUE)
|
||||
->setSetting('target_type', 'user')
|
||||
->setSetting('handler', 'default')
|
||||
->setTranslatable(TRUE)
|
||||
->setDisplayOptions('view', [
|
||||
'label' => 'hidden',
|
||||
'type' => 'author',
|
||||
'weight' => 0,
|
||||
])
|
||||
->setDisplayOptions('form', [
|
||||
'type' => 'entity_reference_autocomplete',
|
||||
'weight' => 5,
|
||||
'settings' => [
|
||||
'match_operator' => 'CONTAINS',
|
||||
'size' => '60',
|
||||
'autocomplete_type' => 'tags',
|
||||
'placeholder' => '',
|
||||
],
|
||||
])
|
||||
->setDisplayConfigurable('form', TRUE)
|
||||
->setDisplayConfigurable('view', TRUE);
|
||||
|
||||
$fields['name'] = BaseFieldDefinition::create('string')
|
||||
->setLabel(t('Name'))
|
||||
->setDescription(t('The name of the Actor-Case Relation entity.'))
|
||||
->setRevisionable(TRUE)
|
||||
->setSettings([
|
||||
'max_length' => 50,
|
||||
'text_processing' => 0,
|
||||
])
|
||||
->setDefaultValue('')
|
||||
->setDisplayOptions('view', [
|
||||
'label' => 'above',
|
||||
'type' => 'string',
|
||||
'weight' => -4,
|
||||
])
|
||||
->setDisplayOptions('form', [
|
||||
'type' => 'string_textfield',
|
||||
'weight' => -4,
|
||||
])
|
||||
->setDisplayConfigurable('form', TRUE)
|
||||
->setDisplayConfigurable('view', TRUE)
|
||||
->setRequired(TRUE);
|
||||
|
||||
$fields['status']->setDescription(t('A boolean indicating whether the Actor-Case Relation is published.'))
|
||||
->setDisplayOptions('form', [
|
||||
'type' => 'boolean_checkbox',
|
||||
'weight' => -3,
|
||||
]);
|
||||
|
||||
$fields['created'] = BaseFieldDefinition::create('created')
|
||||
->setLabel(t('Created'))
|
||||
->setDescription(t('The time that the entity was created.'));
|
||||
|
||||
$fields['changed'] = BaseFieldDefinition::create('changed')
|
||||
->setLabel(t('Changed'))
|
||||
->setDescription(t('The time that the entity was last edited.'));
|
||||
|
||||
$fields['revision_translation_affected'] = BaseFieldDefinition::create('boolean')
|
||||
->setLabel(t('Revision translation affected'))
|
||||
->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
|
||||
->setReadOnly(TRUE)
|
||||
->setRevisionable(TRUE)
|
||||
->setTranslatable(TRUE);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Entity;
|
||||
|
||||
use Drupal\Core\Entity\ContentEntityInterface;
|
||||
use Drupal\Core\Entity\RevisionLogInterface;
|
||||
use Drupal\Core\Entity\EntityChangedInterface;
|
||||
use Drupal\Core\Entity\EntityPublishedInterface;
|
||||
use Drupal\user\EntityOwnerInterface;
|
||||
|
||||
/**
|
||||
* Provides an interface for defining Actor-Case Relation entities.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
interface OCActorCaseRelationInterface extends ContentEntityInterface, RevisionLogInterface, EntityChangedInterface, EntityPublishedInterface, EntityOwnerInterface {
|
||||
|
||||
/**
|
||||
* Add get/set methods for your configuration properties here.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Gets the Actor-Case Relation name.
|
||||
*
|
||||
* @return string
|
||||
* Name of the Actor-Case Relation.
|
||||
*/
|
||||
public function getName();
|
||||
|
||||
/**
|
||||
* Sets the Actor-Case Relation name.
|
||||
*
|
||||
* @param string $name
|
||||
* The Actor-Case Relation name.
|
||||
*
|
||||
* @return \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface
|
||||
* The called Actor-Case Relation entity.
|
||||
*/
|
||||
public function setName($name);
|
||||
|
||||
/**
|
||||
* Gets the Actor-Case Relation creation timestamp.
|
||||
*
|
||||
* @return int
|
||||
* Creation timestamp of the Actor-Case Relation.
|
||||
*/
|
||||
public function getCreatedTime();
|
||||
|
||||
/**
|
||||
* Sets the Actor-Case Relation creation timestamp.
|
||||
*
|
||||
* @param int $timestamp
|
||||
* The Actor-Case Relation creation timestamp.
|
||||
*
|
||||
* @return \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface
|
||||
* The called Actor-Case Relation entity.
|
||||
*/
|
||||
public function setCreatedTime($timestamp);
|
||||
|
||||
/**
|
||||
* Gets the Actor-Case Relation revision creation timestamp.
|
||||
*
|
||||
* @return int
|
||||
* The UNIX timestamp of when this revision was created.
|
||||
*/
|
||||
public function getRevisionCreationTime();
|
||||
|
||||
/**
|
||||
* Sets the Actor-Case Relation revision creation timestamp.
|
||||
*
|
||||
* @param int $timestamp
|
||||
* The UNIX timestamp of when this revision was created.
|
||||
*
|
||||
* @return \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface
|
||||
* The called Actor-Case Relation entity.
|
||||
*/
|
||||
public function setRevisionCreationTime($timestamp);
|
||||
|
||||
/**
|
||||
* Gets the Actor-Case Relation revision author.
|
||||
*
|
||||
* @return \Drupal\user\UserInterface
|
||||
* The user entity for the revision author.
|
||||
*/
|
||||
public function getRevisionUser();
|
||||
|
||||
/**
|
||||
* Sets the Actor-Case Relation revision author.
|
||||
*
|
||||
* @param int $uid
|
||||
* The user ID of the revision author.
|
||||
*
|
||||
* @return \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface
|
||||
* The called Actor-Case Relation entity.
|
||||
*/
|
||||
public function setRevisionUserId($uid);
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Entity;
|
||||
|
||||
use Drupal\Core\Config\Entity\ConfigEntityBundleBase;
|
||||
|
||||
/**
|
||||
* Defines the Actor-Case Relation type entity.
|
||||
*
|
||||
* @ConfigEntityType(
|
||||
* id = "oc_actor_case_relation_type",
|
||||
* label = @Translation("Actor-Case Relation type"),
|
||||
* handlers = {
|
||||
* "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
|
||||
* "list_builder" = "Drupal\opencase_cases\OCActorCaseRelationTypeListBuilder",
|
||||
* "form" = {
|
||||
* "add" = "Drupal\opencase_cases\Form\OCActorCaseRelationTypeForm",
|
||||
* "edit" = "Drupal\opencase_cases\Form\OCActorCaseRelationTypeForm",
|
||||
* "delete" = "Drupal\opencase_cases\Form\OCActorCaseRelationTypeDeleteForm"
|
||||
* },
|
||||
* "route_provider" = {
|
||||
* "html" = "Drupal\opencase_cases\OCActorCaseRelationTypeHtmlRouteProvider",
|
||||
* },
|
||||
* },
|
||||
* config_prefix = "oc_actor_case_relation_type",
|
||||
* admin_permission = "administer site configuration",
|
||||
* bundle_of = "oc_actor_case_relation",
|
||||
* entity_keys = {
|
||||
* "id" = "id",
|
||||
* "label" = "label",
|
||||
* "uuid" = "uuid"
|
||||
* },
|
||||
* links = {
|
||||
* "canonical" = "/admin/structure/oc_actor_case_relation_type/{oc_actor_case_relation_type}",
|
||||
* "add-form" = "/admin/structure/oc_actor_case_relation_type/add",
|
||||
* "edit-form" = "/admin/structure/oc_actor_case_relation_type/{oc_actor_case_relation_type}/edit",
|
||||
* "delete-form" = "/admin/structure/oc_actor_case_relation_type/{oc_actor_case_relation_type}/delete",
|
||||
* "collection" = "/admin/structure/oc_actor_case_relation_type"
|
||||
* }
|
||||
* )
|
||||
*/
|
||||
class OCActorCaseRelationType extends ConfigEntityBundleBase implements OCActorCaseRelationTypeInterface {
|
||||
|
||||
/**
|
||||
* The Actor-Case Relation type ID.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $id;
|
||||
|
||||
/**
|
||||
* The Actor-Case Relation type label.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $label;
|
||||
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Entity;
|
||||
|
||||
use Drupal\Core\Config\Entity\ConfigEntityInterface;
|
||||
|
||||
/**
|
||||
* Provides an interface for defining Actor-Case Relation type entities.
|
||||
*/
|
||||
interface OCActorCaseRelationTypeInterface extends ConfigEntityInterface {
|
||||
|
||||
// Add get/set methods for your configuration properties here.
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Entity;
|
||||
|
||||
use Drupal\views\EntityViewsData;
|
||||
|
||||
/**
|
||||
* Provides Views data for Actor-Case Relation entities.
|
||||
*/
|
||||
class OCActorCaseRelationViewsData extends EntityViewsData {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getViewsData() {
|
||||
$data = parent::getViewsData();
|
||||
|
||||
// Additional information for Views integration, such as table joins, can be
|
||||
// put here.
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Entity;
|
||||
namespace Drupal\opencase_cases\Entity;
|
||||
|
||||
use Drupal\Core\Entity\EntityStorageInterface;
|
||||
use Drupal\Core\Field\BaseFieldDefinition;
|
||||
@ -13,28 +13,28 @@ use Drupal\user\UserInterface;
|
||||
/**
|
||||
* Defines the Case entity.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*
|
||||
* @ContentEntityType(
|
||||
* id = "oc_case",
|
||||
* label = @Translation("Case"),
|
||||
* bundle_label = @Translation("Case type"),
|
||||
* handlers = {
|
||||
* "storage" = "Drupal\opencase_entities\OCCaseStorage",
|
||||
* "storage" = "Drupal\opencase_cases\OCCaseStorage",
|
||||
* "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
|
||||
* "list_builder" = "Drupal\opencase_entities\OCCaseListBuilder",
|
||||
* "views_data" = "Drupal\opencase_entities\Entity\OCCaseViewsData",
|
||||
* "translation" = "Drupal\opencase_entities\OCCaseTranslationHandler",
|
||||
* "list_builder" = "Drupal\opencase_cases\OCCaseListBuilder",
|
||||
* "views_data" = "Drupal\opencase_cases\Entity\OCCaseViewsData",
|
||||
* "translation" = "Drupal\opencase_cases\OCCaseTranslationHandler",
|
||||
*
|
||||
* "form" = {
|
||||
* "default" = "Drupal\opencase_entities\Form\OCCaseForm",
|
||||
* "add" = "Drupal\opencase_entities\Form\OCCaseForm",
|
||||
* "edit" = "Drupal\opencase_entities\Form\OCCaseForm",
|
||||
* "delete" = "Drupal\opencase_entities\Form\OCCaseDeleteForm",
|
||||
* "default" = "Drupal\opencase_cases\Form\OCCaseForm",
|
||||
* "add" = "Drupal\opencase_cases\Form\OCCaseForm",
|
||||
* "edit" = "Drupal\opencase_cases\Form\OCCaseForm",
|
||||
* "delete" = "Drupal\opencase_cases\Form\OCCaseDeleteForm",
|
||||
* },
|
||||
* "access" = "Drupal\opencase_entities\OCCaseAccessControlHandler",
|
||||
* "access" = "Drupal\opencase_cases\OCCaseAccessControlHandler",
|
||||
* "route_provider" = {
|
||||
* "html" = "Drupal\opencase_entities\OCCaseHtmlRouteProvider",
|
||||
* "html" = "Drupal\opencase_cases\OCCaseHtmlRouteProvider",
|
||||
* },
|
||||
* },
|
||||
* base_table = "oc_case",
|
||||
@ -74,17 +74,6 @@ class OCCase extends RevisionableContentEntityBase implements OCCaseInterface {
|
||||
|
||||
use EntityChangedTrait;
|
||||
|
||||
/**
|
||||
* When creating a case, it sets the first involved party to the actor
|
||||
* id from the URL, and the second to the author's linked actor
|
||||
* (if it exists and is different)
|
||||
*/
|
||||
public static function defaultVal() {
|
||||
$author_linked_actor_id = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())->get('field_linked_opencase_actor')->target_id;
|
||||
$currently_viewed_actor_id = \Drupal::request()->query->get('actor_id');
|
||||
return array_unique([$currently_viewed_actor_id, $author_linked_actor_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
@ -222,20 +211,19 @@ class OCCase extends RevisionableContentEntityBase implements OCCaseInterface {
|
||||
->setDefaultValue(TRUE);
|
||||
|
||||
$fields['user_id'] = BaseFieldDefinition::create('entity_reference')
|
||||
->setLabel(t('Entered by'))
|
||||
->setLabel(t('Created by'))
|
||||
->setDescription(t('The user ID of author of the Case entity.'))
|
||||
->setRevisionable(TRUE)
|
||||
->setSetting('target_type', 'user')
|
||||
->setSetting('handler', 'default')
|
||||
->setTranslatable(TRUE)
|
||||
->setDisplayOptions('view', [
|
||||
'label' => 'inline',
|
||||
'label' => 'above',
|
||||
'type' => 'author',
|
||||
'weight' => -4,
|
||||
'weight' => 80,
|
||||
]);
|
||||
$fields['name'] = BaseFieldDefinition::create('string')
|
||||
->setLabel(t('Case Title'))
|
||||
->setDescription(t('A short phrase summing up what this case is about.'))
|
||||
->setLabel(t('Title'))
|
||||
->setRevisionable(TRUE)
|
||||
->setSettings([
|
||||
'max_length' => 50,
|
||||
@ -245,37 +233,13 @@ class OCCase extends RevisionableContentEntityBase implements OCCaseInterface {
|
||||
->setDisplayOptions('view', [
|
||||
'label' => 'hidden',
|
||||
'type' => 'string',
|
||||
'weight' => -3,
|
||||
])
|
||||
->setDisplayOptions('form', [
|
||||
'type' => 'string_textfield',
|
||||
'weight' => -3,
|
||||
'weight' => -100,
|
||||
])
|
||||
->setRequired(TRUE);
|
||||
|
||||
$fields['actors_involved'] = BaseFieldDefinition::create('entity_reference')
|
||||
->setLabel(t('Involved Parties'))
|
||||
->setDescription(t('People involved in this case. To add one, start typing their name.'))
|
||||
->setSetting('target_type', 'oc_actor')
|
||||
->setSetting('handler', 'default')
|
||||
->setTranslatable(TRUE)
|
||||
->setCardinality(-1)
|
||||
->setDisplayOptions('form', [
|
||||
'type' => 'entity_reference_autocomplete',
|
||||
'weight' => -2,
|
||||
'settings' => [
|
||||
'match_operator' => 'CONTAINS',
|
||||
'size' => '60',
|
||||
'autocomplete_type' => 'tags',
|
||||
'placeholder' => '',
|
||||
],
|
||||
])
|
||||
->setDisplayOptions('view', [
|
||||
'label' => 'above',
|
||||
'weight' => -2
|
||||
])
|
||||
->setDefaultValueCallback('Drupal\opencase_entities\Entity\OCCase::defaultVal')
|
||||
->setRequired(TRUE);
|
||||
|
||||
$fields['files'] = BaseFieldDefinition::create('file')
|
||||
->setLabel(t('Files'))
|
||||
@ -295,17 +259,24 @@ class OCCase extends RevisionableContentEntityBase implements OCCaseInterface {
|
||||
])
|
||||
->setDisplayOptions('view', [
|
||||
'label' => 'above',
|
||||
'weight' => -1,
|
||||
'settings' => ['use_description_as_link_text' => 'true']
|
||||
]);
|
||||
|
||||
$fields['created'] = BaseFieldDefinition::create('created')
|
||||
->setLabel(t('Created'))
|
||||
->setDescription(t('The time that the entity was created.'));
|
||||
->setLabel(t('Created on'))
|
||||
->setDescription(t('When the case was created.'))
|
||||
->setDisplayOptions('view', [
|
||||
'label' => 'above',
|
||||
'weight' => 80,
|
||||
]);
|
||||
|
||||
$fields['changed'] = BaseFieldDefinition::create('changed')
|
||||
->setLabel(t('Changed'))
|
||||
->setDescription(t('The time that the entity was last edited.'));
|
||||
->setLabel(t('Last updated'))
|
||||
->setDescription(t('When the case was last edited.'))
|
||||
->setDisplayOptions('view', [
|
||||
'label' => 'above',
|
||||
'weight' => 80,
|
||||
]);
|
||||
|
||||
$fields['revision_translation_affected'] = BaseFieldDefinition::create('boolean')
|
||||
->setLabel(t('Revision translation affected'))
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Entity;
|
||||
namespace Drupal\opencase_cases\Entity;
|
||||
|
||||
use Drupal\Core\Entity\ContentEntityInterface;
|
||||
use Drupal\Core\Entity\RevisionLogInterface;
|
||||
@ -10,7 +10,7 @@ use Drupal\user\EntityOwnerInterface;
|
||||
/**
|
||||
* Provides an interface for defining Case entities.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
interface OCCaseInterface extends ContentEntityInterface, RevisionLogInterface, EntityChangedInterface, EntityOwnerInterface {
|
||||
|
||||
@ -30,7 +30,7 @@ interface OCCaseInterface extends ContentEntityInterface, RevisionLogInterface,
|
||||
* @param string $name
|
||||
* The Case name.
|
||||
*
|
||||
* @return \Drupal\opencase_entities\Entity\OCCaseInterface
|
||||
* @return \Drupal\opencase_cases\Entity\OCCaseInterface
|
||||
* The called Case entity.
|
||||
*/
|
||||
public function setName($name);
|
||||
@ -49,7 +49,7 @@ interface OCCaseInterface extends ContentEntityInterface, RevisionLogInterface,
|
||||
* @param int $timestamp
|
||||
* The Case creation timestamp.
|
||||
*
|
||||
* @return \Drupal\opencase_entities\Entity\OCCaseInterface
|
||||
* @return \Drupal\opencase_cases\Entity\OCCaseInterface
|
||||
* The called Case entity.
|
||||
*/
|
||||
public function setCreatedTime($timestamp);
|
||||
@ -70,7 +70,7 @@ interface OCCaseInterface extends ContentEntityInterface, RevisionLogInterface,
|
||||
* @param bool $published
|
||||
* TRUE to set this Case to published, FALSE to set it to unpublished.
|
||||
*
|
||||
* @return \Drupal\opencase_entities\Entity\OCCaseInterface
|
||||
* @return \Drupal\opencase_cases\Entity\OCCaseInterface
|
||||
* The called Case entity.
|
||||
*/
|
||||
public function setPublished($published);
|
||||
@ -89,7 +89,7 @@ interface OCCaseInterface extends ContentEntityInterface, RevisionLogInterface,
|
||||
* @param int $timestamp
|
||||
* The UNIX timestamp of when this revision was created.
|
||||
*
|
||||
* @return \Drupal\opencase_entities\Entity\OCCaseInterface
|
||||
* @return \Drupal\opencase_cases\Entity\OCCaseInterface
|
||||
* The called Case entity.
|
||||
*/
|
||||
public function setRevisionCreationTime($timestamp);
|
||||
@ -108,7 +108,7 @@ interface OCCaseInterface extends ContentEntityInterface, RevisionLogInterface,
|
||||
* @param int $uid
|
||||
* The user ID of the revision author.
|
||||
*
|
||||
* @return \Drupal\opencase_entities\Entity\OCCaseInterface
|
||||
* @return \Drupal\opencase_cases\Entity\OCCaseInterface
|
||||
* The called Case entity.
|
||||
*/
|
||||
public function setRevisionUserId($uid);
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Entity;
|
||||
namespace Drupal\opencase_cases\Entity;
|
||||
|
||||
use Drupal\Core\Config\Entity\ConfigEntityBundleBase;
|
||||
|
||||
@ -11,20 +11,20 @@ use Drupal\Core\Config\Entity\ConfigEntityBundleBase;
|
||||
* id = "oc_case_type",
|
||||
* label = @Translation("Case type"),
|
||||
* handlers = {
|
||||
* "access" = "Drupal\opencase_entities\OCCaseTypeAccessControlHandler",
|
||||
* "access" = "Drupal\opencase_cases\OCCaseTypeAccessControlHandler",
|
||||
* "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
|
||||
* "list_builder" = "Drupal\opencase_entities\OCCaseTypeListBuilder",
|
||||
* "list_builder" = "Drupal\opencase_cases\OCCaseTypeListBuilder",
|
||||
* "form" = {
|
||||
* "add" = "Drupal\opencase_entities\Form\OCCaseTypeForm",
|
||||
* "edit" = "Drupal\opencase_entities\Form\OCCaseTypeForm",
|
||||
* "delete" = "Drupal\opencase_entities\Form\OCCaseTypeDeleteForm"
|
||||
* "add" = "Drupal\opencase_cases\Form\OCCaseTypeForm",
|
||||
* "edit" = "Drupal\opencase_cases\Form\OCCaseTypeForm",
|
||||
* "delete" = "Drupal\opencase_cases\Form\OCCaseTypeDeleteForm"
|
||||
* },
|
||||
* "route_provider" = {
|
||||
* "html" = "Drupal\opencase_entities\OCCaseTypeHtmlRouteProvider",
|
||||
* "html" = "Drupal\opencase_cases\OCCaseTypeHtmlRouteProvider",
|
||||
* },
|
||||
* },
|
||||
* config_prefix = "oc_case_type",
|
||||
* admin_permission = "administer opencase entity bundles",
|
||||
* admin_permission = "administer case bundles",
|
||||
* bundle_of = "oc_case",
|
||||
* entity_keys = {
|
||||
* "id" = "id",
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Entity;
|
||||
namespace Drupal\opencase_cases\Entity;
|
||||
|
||||
use Drupal\Core\Config\Entity\ConfigEntityInterface;
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Entity;
|
||||
namespace Drupal\opencase_cases\Entity;
|
||||
|
||||
use Drupal\views\EntityViewsData;
|
||||
|
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Entity\ContentEntityDeleteForm;
|
||||
|
||||
/**
|
||||
* Provides a form for deleting Actor-Case Relation entities.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCActorCaseRelationDeleteForm extends ContentEntityDeleteForm {
|
||||
|
||||
|
||||
}
|
87
modules/opencase_cases/src/Form/OCActorCaseRelationForm.php
Normal file
87
modules/opencase_cases/src/Form/OCActorCaseRelationForm.php
Normal file
@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Entity\ContentEntityForm;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Form controller for Actor-Case Relation edit forms.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCActorCaseRelationForm extends ContentEntityForm {
|
||||
|
||||
/**
|
||||
* The current user account.
|
||||
*
|
||||
* @var \Drupal\Core\Session\AccountProxyInterface
|
||||
*/
|
||||
protected $account;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container) {
|
||||
// Instantiates this form class.
|
||||
$instance = parent::create($container);
|
||||
$instance->account = $container->get('current_user');
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildForm(array $form, FormStateInterface $form_state) {
|
||||
/* @var \Drupal\opencase_cases\Entity\OCActorCaseRelation $entity */
|
||||
$form = parent::buildForm($form, $form_state);
|
||||
|
||||
if (!$this->entity->isNew()) {
|
||||
$form['new_revision'] = [
|
||||
'#type' => 'checkbox',
|
||||
'#title' => $this->t('Create new revision'),
|
||||
'#default_value' => FALSE,
|
||||
'#weight' => 10,
|
||||
];
|
||||
}
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function save(array $form, FormStateInterface $form_state) {
|
||||
$entity = $this->entity;
|
||||
|
||||
// Save as a new revision if requested to do so.
|
||||
if (!$form_state->isValueEmpty('new_revision') && $form_state->getValue('new_revision') != FALSE) {
|
||||
$entity->setNewRevision();
|
||||
|
||||
// If a new revision is created, save the current user as revision author.
|
||||
$entity->setRevisionCreationTime($this->time->getRequestTime());
|
||||
$entity->setRevisionUserId($this->account->id());
|
||||
}
|
||||
else {
|
||||
$entity->setNewRevision(FALSE);
|
||||
}
|
||||
|
||||
$status = parent::save($form, $form_state);
|
||||
|
||||
switch ($status) {
|
||||
case SAVED_NEW:
|
||||
$this->messenger()->addMessage($this->t('Created the %label Actor-Case Relation.', [
|
||||
'%label' => $entity->label(),
|
||||
]));
|
||||
break;
|
||||
|
||||
default:
|
||||
$this->messenger()->addMessage($this->t('Saved the %label Actor-Case Relation.', [
|
||||
'%label' => $entity->label(),
|
||||
]));
|
||||
}
|
||||
$form_state->setRedirect('entity.oc_actor_case_relation.canonical', ['oc_actor_case_relation' => $entity->id()]);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Form\ConfirmFormBase;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Url;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Provides a form for deleting a Actor-Case Relation revision.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCActorCaseRelationRevisionDeleteForm extends ConfirmFormBase {
|
||||
|
||||
/**
|
||||
* The Actor-Case Relation revision.
|
||||
*
|
||||
* @var \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface
|
||||
*/
|
||||
protected $revision;
|
||||
|
||||
/**
|
||||
* The Actor-Case Relation storage.
|
||||
*
|
||||
* @var \Drupal\Core\Entity\EntityStorageInterface
|
||||
*/
|
||||
protected $oCActorCaseRelationStorage;
|
||||
|
||||
/**
|
||||
* The database connection.
|
||||
*
|
||||
* @var \Drupal\Core\Database\Connection
|
||||
*/
|
||||
protected $connection;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container) {
|
||||
$instance = parent::create($container);
|
||||
$instance->oCActorCaseRelationStorage = $container->get('entity_type.manager')->getStorage('oc_actor_case_relation');
|
||||
$instance->connection = $container->get('database');
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getFormId() {
|
||||
return 'oc_actor_case_relation_revision_delete_confirm';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getQuestion() {
|
||||
return $this->t('Are you sure you want to delete the revision from %revision-date?', [
|
||||
'%revision-date' => format_date($this->revision->getRevisionCreationTime()),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCancelUrl() {
|
||||
return new Url('entity.oc_actor_case_relation.version_history', ['oc_actor_case_relation' => $this->revision->id()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getConfirmText() {
|
||||
return $this->t('Delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildForm(array $form, FormStateInterface $form_state, $oc_actor_case_relation_revision = NULL) {
|
||||
$this->revision = $this->OCActorCaseRelationStorage->loadRevision($oc_actor_case_relation_revision);
|
||||
$form = parent::buildForm($form, $form_state);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function submitForm(array &$form, FormStateInterface $form_state) {
|
||||
$this->OCActorCaseRelationStorage->deleteRevision($this->revision->getRevisionId());
|
||||
|
||||
$this->logger('content')->notice('Actor-Case Relation: deleted %title revision %revision.', ['%title' => $this->revision->label(), '%revision' => $this->revision->getRevisionId()]);
|
||||
$this->messenger()->addMessage(t('Revision from %revision-date of Actor-Case Relation %title has been deleted.', ['%revision-date' => format_date($this->revision->getRevisionCreationTime()), '%title' => $this->revision->label()]));
|
||||
$form_state->setRedirect(
|
||||
'entity.oc_actor_case_relation.canonical',
|
||||
['oc_actor_case_relation' => $this->revision->id()]
|
||||
);
|
||||
if ($this->connection->query('SELECT COUNT(DISTINCT vid) FROM {oc_actor_case_relation_field_revision} WHERE id = :id', [':id' => $this->revision->id()])->fetchField() > 1) {
|
||||
$form_state->setRedirect(
|
||||
'entity.oc_actor_case_relation.version_history',
|
||||
['oc_actor_case_relation' => $this->revision->id()]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,137 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Form\ConfirmFormBase;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\opencase_cases\Entity\OCActorCaseRelationInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Provides a form for reverting a Actor-Case Relation revision.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCActorCaseRelationRevisionRevertForm extends ConfirmFormBase {
|
||||
|
||||
/**
|
||||
* The Actor-Case Relation revision.
|
||||
*
|
||||
* @var \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface
|
||||
*/
|
||||
protected $revision;
|
||||
|
||||
/**
|
||||
* The Actor-Case Relation storage.
|
||||
*
|
||||
* @var \Drupal\Core\Entity\EntityStorageInterface
|
||||
*/
|
||||
protected $oCActorCaseRelationStorage;
|
||||
|
||||
/**
|
||||
* The date formatter service.
|
||||
*
|
||||
* @var \Drupal\Core\Datetime\DateFormatterInterface
|
||||
*/
|
||||
protected $dateFormatter;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container) {
|
||||
$instance = parent::create($container);
|
||||
$instance->oCActorCaseRelationStorage = $container->get('entity_type.manager')->getStorage('oc_actor_case_relation');
|
||||
$instance->dateFormatter = $container->get('date.formatter');
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getFormId() {
|
||||
return 'oc_actor_case_relation_revision_revert_confirm';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getQuestion() {
|
||||
return $this->t('Are you sure you want to revert to the revision from %revision-date?', [
|
||||
'%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime()),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCancelUrl() {
|
||||
return new Url('entity.oc_actor_case_relation.version_history', ['oc_actor_case_relation' => $this->revision->id()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getConfirmText() {
|
||||
return $this->t('Revert');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getDescription() {
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildForm(array $form, FormStateInterface $form_state, $oc_actor_case_relation_revision = NULL) {
|
||||
$this->revision = $this->OCActorCaseRelationStorage->loadRevision($oc_actor_case_relation_revision);
|
||||
$form = parent::buildForm($form, $form_state);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function submitForm(array &$form, FormStateInterface $form_state) {
|
||||
// The revision timestamp will be updated when the revision is saved. Keep
|
||||
// the original one for the confirmation message.
|
||||
$original_revision_timestamp = $this->revision->getRevisionCreationTime();
|
||||
|
||||
$this->revision = $this->prepareRevertedRevision($this->revision, $form_state);
|
||||
$this->revision->revision_log = $this->t('Copy of the revision from %date.', [
|
||||
'%date' => $this->dateFormatter->format($original_revision_timestamp),
|
||||
]);
|
||||
$this->revision->save();
|
||||
|
||||
$this->logger('content')->notice('Actor-Case Relation: reverted %title revision %revision.', ['%title' => $this->revision->label(), '%revision' => $this->revision->getRevisionId()]);
|
||||
$this->messenger()->addMessage(t('Actor-Case Relation %title has been reverted to the revision from %revision-date.', ['%title' => $this->revision->label(), '%revision-date' => $this->dateFormatter->format($original_revision_timestamp)]));
|
||||
$form_state->setRedirect(
|
||||
'entity.oc_actor_case_relation.version_history',
|
||||
['oc_actor_case_relation' => $this->revision->id()]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares a revision to be reverted.
|
||||
*
|
||||
* @param \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface $revision
|
||||
* The revision to be reverted.
|
||||
* @param \Drupal\Core\Form\FormStateInterface $form_state
|
||||
* The current state of the form.
|
||||
*
|
||||
* @return \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface
|
||||
* The prepared revision ready to be stored.
|
||||
*/
|
||||
protected function prepareRevertedRevision(OCActorCaseRelationInterface $revision, FormStateInterface $form_state) {
|
||||
$revision->setNewRevision();
|
||||
$revision->isDefaultRevision(TRUE);
|
||||
$revision->setRevisionCreationTime(REQUEST_TIME);
|
||||
|
||||
return $revision;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\opencase_cases\Entity\OCActorCaseRelationInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Provides a form for reverting a Actor-Case Relation revision for a single trans.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCActorCaseRelationRevisionRevertTranslationForm extends OCActorCaseRelationRevisionRevertForm {
|
||||
|
||||
/**
|
||||
* The language to be reverted.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $langcode;
|
||||
|
||||
/**
|
||||
* The language manager.
|
||||
*
|
||||
* @var \Drupal\Core\Language\LanguageManagerInterface
|
||||
*/
|
||||
protected $languageManager;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container) {
|
||||
$instance = parent::create($container);
|
||||
$instance->languageManager = $container->get('language_manager');
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getFormId() {
|
||||
return 'oc_actor_case_relation_revision_revert_translation_confirm';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getQuestion() {
|
||||
return $this->t('Are you sure you want to revert @language translation to the revision from %revision-date?', [
|
||||
'@language' => $this->languageManager->getLanguageName($this->langcode),
|
||||
'%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime()),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildForm(array $form, FormStateInterface $form_state, $oc_actor_case_relation_revision = NULL, $langcode = NULL) {
|
||||
$this->langcode = $langcode;
|
||||
$form = parent::buildForm($form, $form_state, $oc_actor_case_relation_revision);
|
||||
|
||||
$form['revert_untranslated_fields'] = [
|
||||
'#type' => 'checkbox',
|
||||
'#title' => $this->t('Revert content shared among translations'),
|
||||
'#default_value' => FALSE,
|
||||
];
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function prepareRevertedRevision(OCActorCaseRelationInterface $revision, FormStateInterface $form_state) {
|
||||
$revert_untranslated_fields = $form_state->getValue('revert_untranslated_fields');
|
||||
|
||||
/** @var \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface $default_revision */
|
||||
$latest_revision = $this->OCActorCaseRelationStorage->load($revision->id());
|
||||
$latest_revision_translation = $latest_revision->getTranslation($this->langcode);
|
||||
|
||||
$revision_translation = $revision->getTranslation($this->langcode);
|
||||
|
||||
foreach ($latest_revision_translation->getFieldDefinitions() as $field_name => $definition) {
|
||||
if ($definition->isTranslatable() || $revert_untranslated_fields) {
|
||||
$latest_revision_translation->set($field_name, $revision_translation->get($field_name)->getValue());
|
||||
}
|
||||
}
|
||||
|
||||
$latest_revision_translation->setNewRevision();
|
||||
$latest_revision_translation->isDefaultRevision(TRUE);
|
||||
$revision->setRevisionCreationTime(REQUEST_TIME);
|
||||
|
||||
return $latest_revision_translation;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Form\FormBase;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
|
||||
/**
|
||||
* Class OCActorCaseRelationSettingsForm.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCActorCaseRelationSettingsForm extends FormBase {
|
||||
|
||||
/**
|
||||
* Returns a unique string identifying the form.
|
||||
*
|
||||
* @return string
|
||||
* The unique string identifying the form.
|
||||
*/
|
||||
public function getFormId() {
|
||||
return 'ocactorcaserelation_settings';
|
||||
}
|
||||
|
||||
/**
|
||||
* Form submission handler.
|
||||
*
|
||||
* @param array $form
|
||||
* An associative array containing the structure of the form.
|
||||
* @param \Drupal\Core\Form\FormStateInterface $form_state
|
||||
* The current state of the form.
|
||||
*/
|
||||
public function submitForm(array &$form, FormStateInterface $form_state) {
|
||||
// Empty implementation of the abstract submit class.
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines the settings form for Actor-Case Relation entities.
|
||||
*
|
||||
* @param array $form
|
||||
* An associative array containing the structure of the form.
|
||||
* @param \Drupal\Core\Form\FormStateInterface $form_state
|
||||
* The current state of the form.
|
||||
*
|
||||
* @return array
|
||||
* Form definition array.
|
||||
*/
|
||||
public function buildForm(array $form, FormStateInterface $form_state) {
|
||||
$form['ocactorcaserelation_settings']['#markup'] = 'Settings form for Actor-Case Relation entities. Manage field settings here.';
|
||||
return $form;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Entity\EntityConfirmFormBase;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Url;
|
||||
|
||||
/**
|
||||
* Builds the form to delete Actor-Case Relation type entities.
|
||||
*/
|
||||
class OCActorCaseRelationTypeDeleteForm extends EntityConfirmFormBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getQuestion() {
|
||||
return $this->t('Are you sure you want to delete %name?', ['%name' => $this->entity->label()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCancelUrl() {
|
||||
return new Url('entity.oc_actor_case_relation_type.collection');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getConfirmText() {
|
||||
return $this->t('Delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function submitForm(array &$form, FormStateInterface $form_state) {
|
||||
$this->entity->delete();
|
||||
|
||||
$this->messenger()->addMessage(
|
||||
$this->t('content @type: deleted @label.', [
|
||||
'@type' => $this->entity->bundle(),
|
||||
'@label' => $this->entity->label(),
|
||||
])
|
||||
);
|
||||
|
||||
$form_state->setRedirectUrl($this->getCancelUrl());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Entity\EntityForm;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
|
||||
/**
|
||||
* Class OCActorCaseRelationTypeForm.
|
||||
*/
|
||||
class OCActorCaseRelationTypeForm extends EntityForm {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function form(array $form, FormStateInterface $form_state) {
|
||||
$form = parent::form($form, $form_state);
|
||||
|
||||
$oc_actor_case_relation_type = $this->entity;
|
||||
$form['label'] = [
|
||||
'#type' => 'textfield',
|
||||
'#title' => $this->t('Label'),
|
||||
'#maxlength' => 255,
|
||||
'#default_value' => $oc_actor_case_relation_type->label(),
|
||||
'#description' => $this->t("Label for the Actor-Case Relation type."),
|
||||
'#required' => TRUE,
|
||||
];
|
||||
|
||||
$form['id'] = [
|
||||
'#type' => 'machine_name',
|
||||
'#default_value' => $oc_actor_case_relation_type->id(),
|
||||
'#machine_name' => [
|
||||
'exists' => '\Drupal\opencase_cases\Entity\OCActorCaseRelationType::load',
|
||||
],
|
||||
'#disabled' => !$oc_actor_case_relation_type->isNew(),
|
||||
];
|
||||
|
||||
/* You will need additional form elements for your custom properties. */
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function save(array $form, FormStateInterface $form_state) {
|
||||
$oc_actor_case_relation_type = $this->entity;
|
||||
$status = $oc_actor_case_relation_type->save();
|
||||
|
||||
switch ($status) {
|
||||
case SAVED_NEW:
|
||||
$this->messenger()->addMessage($this->t('Created the %label Actor-Case Relation type.', [
|
||||
'%label' => $oc_actor_case_relation_type->label(),
|
||||
]));
|
||||
break;
|
||||
|
||||
default:
|
||||
$this->messenger()->addMessage($this->t('Saved the %label Actor-Case Relation type.', [
|
||||
'%label' => $oc_actor_case_relation_type->label(),
|
||||
]));
|
||||
}
|
||||
$form_state->setRedirectUrl($oc_actor_case_relation_type->toUrl('collection'));
|
||||
}
|
||||
|
||||
}
|
@ -1,13 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Form;
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Entity\ContentEntityDeleteForm;
|
||||
|
||||
/**
|
||||
* Provides a form for deleting Case entities.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCCaseDeleteForm extends ContentEntityDeleteForm {
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Form;
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Entity\ContentEntityForm;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
@ -8,7 +8,7 @@ use Drupal\Core\Form\FormStateInterface;
|
||||
/**
|
||||
* Form controller for Case edit forms.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCCaseForm extends ContentEntityForm {
|
||||
|
||||
@ -16,7 +16,7 @@ class OCCaseForm extends ContentEntityForm {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildForm(array $form, FormStateInterface $form_state) {
|
||||
/* @var $entity \Drupal\opencase_entities\Entity\OCCase */
|
||||
/* @var $entity \Drupal\opencase_cases\Entity\OCCase */
|
||||
$form = parent::buildForm($form, $form_state);
|
||||
|
||||
if (!$this->entity->isNew()) {
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Form;
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Database\Connection;
|
||||
use Drupal\Core\Entity\EntityStorageInterface;
|
||||
@ -12,7 +12,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
/**
|
||||
* Provides a form for deleting a Case revision.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCCaseRevisionDeleteForm extends ConfirmFormBase {
|
||||
|
||||
@ -20,7 +20,7 @@ class OCCaseRevisionDeleteForm extends ConfirmFormBase {
|
||||
/**
|
||||
* The Case revision.
|
||||
*
|
||||
* @var \Drupal\opencase_entities\Entity\OCCaseInterface
|
||||
* @var \Drupal\opencase_cases\Entity\OCCaseInterface
|
||||
*/
|
||||
protected $revision;
|
||||
|
@ -1,19 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Form;
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Datetime\DateFormatterInterface;
|
||||
use Drupal\Core\Entity\EntityStorageInterface;
|
||||
use Drupal\Core\Form\ConfirmFormBase;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\opencase_entities\Entity\OCCaseInterface;
|
||||
use Drupal\opencase_cases\Entity\OCCaseInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Provides a form for reverting a Case revision.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCCaseRevisionRevertForm extends ConfirmFormBase {
|
||||
|
||||
@ -21,7 +21,7 @@ class OCCaseRevisionRevertForm extends ConfirmFormBase {
|
||||
/**
|
||||
* The Case revision.
|
||||
*
|
||||
* @var \Drupal\opencase_entities\Entity\OCCaseInterface
|
||||
* @var \Drupal\opencase_cases\Entity\OCCaseInterface
|
||||
*/
|
||||
protected $revision;
|
||||
|
||||
@ -130,12 +130,12 @@ class OCCaseRevisionRevertForm extends ConfirmFormBase {
|
||||
/**
|
||||
* Prepares a revision to be reverted.
|
||||
*
|
||||
* @param \Drupal\opencase_entities\Entity\OCCaseInterface $revision
|
||||
* @param \Drupal\opencase_cases\Entity\OCCaseInterface $revision
|
||||
* The revision to be reverted.
|
||||
* @param \Drupal\Core\Form\FormStateInterface $form_state
|
||||
* The current state of the form.
|
||||
*
|
||||
* @return \Drupal\opencase_entities\Entity\OCCaseInterface
|
||||
* @return \Drupal\opencase_cases\Entity\OCCaseInterface
|
||||
* The prepared revision ready to be stored.
|
||||
*/
|
||||
protected function prepareRevertedRevision(OCCaseInterface $revision, FormStateInterface $form_state) {
|
@ -1,18 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Form;
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Datetime\DateFormatterInterface;
|
||||
use Drupal\Core\Entity\EntityStorageInterface;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Language\LanguageManagerInterface;
|
||||
use Drupal\opencase_entities\Entity\OCCaseInterface;
|
||||
use Drupal\opencase_cases\Entity\OCCaseInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Provides a form for reverting a Case revision for a single translation.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCCaseRevisionRevertTranslationForm extends OCCaseRevisionRevertForm {
|
||||
|
||||
@ -93,7 +93,7 @@ class OCCaseRevisionRevertTranslationForm extends OCCaseRevisionRevertForm {
|
||||
protected function prepareRevertedRevision(OCCaseInterface $revision, FormStateInterface $form_state) {
|
||||
$revert_untranslated_fields = $form_state->getValue('revert_untranslated_fields');
|
||||
|
||||
/** @var \Drupal\opencase_entities\Entity\OCCaseInterface $default_revision */
|
||||
/** @var \Drupal\opencase_cases\Entity\OCCaseInterface $default_revision */
|
||||
$latest_revision = $this->OCCaseStorage->load($revision->id());
|
||||
$latest_revision_translation = $latest_revision->getTranslation($this->langcode);
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Form;
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Form\FormBase;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
@ -8,7 +8,7 @@ use Drupal\Core\Form\FormStateInterface;
|
||||
/**
|
||||
* Class OCCaseSettingsForm.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCCaseSettingsForm extends FormBase {
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Form;
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Entity\EntityConfirmFormBase;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities\Form;
|
||||
namespace Drupal\opencase_cases\Form;
|
||||
|
||||
use Drupal\Core\Entity\EntityForm;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
@ -30,7 +30,7 @@ class OCCaseTypeForm extends EntityForm {
|
||||
'#type' => 'machine_name',
|
||||
'#default_value' => $oc_case_type->id(),
|
||||
'#machine_name' => [
|
||||
'exists' => '\Drupal\opencase_entities\Entity\OCCaseType::load',
|
||||
'exists' => '\Drupal\opencase_cases\Entity\OCCaseType::load',
|
||||
],
|
||||
'#disabled' => !$oc_case_type->isNew(),
|
||||
];
|
@ -0,0 +1,116 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\EntityAccessControlHandler;
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Core\Access\AccessResult;
|
||||
|
||||
/**
|
||||
* Access controller for the Actor-Case Relation entity.
|
||||
*
|
||||
* @see \Drupal\opencase_cases\Entity\OCActorCaseRelation.
|
||||
*/
|
||||
class OCActorCaseRelationAccessControlHandler extends EntityAccessControlHandler {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
|
||||
/** @var \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface $entity */
|
||||
|
||||
switch ($operation) {
|
||||
|
||||
case 'view':
|
||||
|
||||
if (!$entity->isPublished()) {
|
||||
$permission = $this->checkOwn($entity, 'view unpublished', $account);
|
||||
if (!empty($permission)) {
|
||||
return AccessResult::allowed();
|
||||
}
|
||||
|
||||
return AccessResult::allowedIfHasPermission($account, 'view unpublished actor-case relation entities');
|
||||
}
|
||||
|
||||
$permission = $this->checkOwn($entity, $operation, $account);
|
||||
if (!empty($permission)) {
|
||||
return AccessResult::allowed();
|
||||
}
|
||||
|
||||
return AccessResult::allowedIfHasPermission($account, 'view published actor-case relation entities');
|
||||
|
||||
case 'update':
|
||||
|
||||
$permission = $this->checkOwn($entity, $operation, $account);
|
||||
if (!empty($permission)) {
|
||||
return AccessResult::allowed();
|
||||
}
|
||||
return AccessResult::allowedIfHasPermission($account, 'edit actor-case relation entities');
|
||||
|
||||
case 'delete':
|
||||
|
||||
$permission = $this->checkOwn($entity, $operation, $account);
|
||||
if (!empty($permission)) {
|
||||
return AccessResult::allowed();
|
||||
}
|
||||
return AccessResult::allowedIfHasPermission($account, 'delete actor-case relation entities');
|
||||
}
|
||||
|
||||
// Unknown operation, no opinion.
|
||||
return AccessResult::neutral();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
|
||||
return AccessResult::allowedIfHasPermission($account, 'add actor-case relation entities');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for given 'own' permission.
|
||||
*
|
||||
* @param \Drupal\Core\Entity\EntityInterface $entity
|
||||
* @param $operation
|
||||
* @param \Drupal\Core\Session\AccountInterface $account
|
||||
*
|
||||
* @return string|null
|
||||
* The permission string indicating it's allowed.
|
||||
*/
|
||||
protected function checkOwn(EntityInterface $entity, $operation, AccountInterface $account) {
|
||||
$status = $entity->isPublished();
|
||||
$uid = $entity->getOwnerId();
|
||||
|
||||
$is_own = $account->isAuthenticated() && $account->id() == $uid;
|
||||
if (!$is_own) {
|
||||
return;
|
||||
}
|
||||
|
||||
$bundle = $entity->bundle();
|
||||
|
||||
$ops = [
|
||||
'create' => '%bundle add own %bundle entities',
|
||||
'view unpublished' => '%bundle view own unpublished %bundle entities',
|
||||
'view' => '%bundle view own entities',
|
||||
'update' => '%bundle edit own entities',
|
||||
'delete' => '%bundle delete own entities',
|
||||
];
|
||||
$permission = strtr($ops[$operation], ['%bundle' => $bundle]);
|
||||
|
||||
if ($operation === 'view unpublished') {
|
||||
if (!$status && $account->hasPermission($permission)) {
|
||||
return $permission;
|
||||
}
|
||||
else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
if ($account->hasPermission($permission)) {
|
||||
return $permission;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,196 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\EntityTypeInterface;
|
||||
use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider;
|
||||
use Symfony\Component\Routing\Route;
|
||||
|
||||
/**
|
||||
* Provides routes for Actor-Case Relation entities.
|
||||
*
|
||||
* @see \Drupal\Core\Entity\Routing\AdminHtmlRouteProvider
|
||||
* @see \Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider
|
||||
*/
|
||||
class OCActorCaseRelationHtmlRouteProvider extends AdminHtmlRouteProvider {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getRoutes(EntityTypeInterface $entity_type) {
|
||||
$collection = parent::getRoutes($entity_type);
|
||||
|
||||
$entity_type_id = $entity_type->id();
|
||||
|
||||
if ($history_route = $this->getHistoryRoute($entity_type)) {
|
||||
$collection->add("entity.{$entity_type_id}.version_history", $history_route);
|
||||
}
|
||||
|
||||
if ($revision_route = $this->getRevisionRoute($entity_type)) {
|
||||
$collection->add("entity.{$entity_type_id}.revision", $revision_route);
|
||||
}
|
||||
|
||||
if ($revert_route = $this->getRevisionRevertRoute($entity_type)) {
|
||||
$collection->add("entity.{$entity_type_id}.revision_revert", $revert_route);
|
||||
}
|
||||
|
||||
if ($delete_route = $this->getRevisionDeleteRoute($entity_type)) {
|
||||
$collection->add("entity.{$entity_type_id}.revision_delete", $delete_route);
|
||||
}
|
||||
|
||||
if ($translation_route = $this->getRevisionTranslationRevertRoute($entity_type)) {
|
||||
$collection->add("{$entity_type_id}.revision_revert_translation_confirm", $translation_route);
|
||||
}
|
||||
|
||||
if ($settings_form_route = $this->getSettingsFormRoute($entity_type)) {
|
||||
$collection->add("$entity_type_id.settings", $settings_form_route);
|
||||
}
|
||||
|
||||
return $collection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the version history route.
|
||||
*
|
||||
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
|
||||
* The entity type.
|
||||
*
|
||||
* @return \Symfony\Component\Routing\Route|null
|
||||
* The generated route, if available.
|
||||
*/
|
||||
protected function getHistoryRoute(EntityTypeInterface $entity_type) {
|
||||
if ($entity_type->hasLinkTemplate('version-history')) {
|
||||
$route = new Route($entity_type->getLinkTemplate('version-history'));
|
||||
$route
|
||||
->setDefaults([
|
||||
'_title' => "{$entity_type->getLabel()} revisions",
|
||||
'_controller' => '\Drupal\opencase_cases\Controller\OCActorCaseRelationController::revisionOverview',
|
||||
])
|
||||
->setRequirement('_permission', 'view all actor-case relation revisions')
|
||||
->setOption('_admin_route', TRUE);
|
||||
|
||||
return $route;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the revision route.
|
||||
*
|
||||
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
|
||||
* The entity type.
|
||||
*
|
||||
* @return \Symfony\Component\Routing\Route|null
|
||||
* The generated route, if available.
|
||||
*/
|
||||
protected function getRevisionRoute(EntityTypeInterface $entity_type) {
|
||||
if ($entity_type->hasLinkTemplate('revision')) {
|
||||
$route = new Route($entity_type->getLinkTemplate('revision'));
|
||||
$route
|
||||
->setDefaults([
|
||||
'_controller' => '\Drupal\opencase_cases\Controller\OCActorCaseRelationController::revisionShow',
|
||||
'_title_callback' => '\Drupal\opencase_cases\Controller\OCActorCaseRelationController::revisionPageTitle',
|
||||
])
|
||||
->setRequirement('_permission', 'view all actor-case relation revisions')
|
||||
->setOption('_admin_route', TRUE);
|
||||
|
||||
return $route;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the revision revert route.
|
||||
*
|
||||
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
|
||||
* The entity type.
|
||||
*
|
||||
* @return \Symfony\Component\Routing\Route|null
|
||||
* The generated route, if available.
|
||||
*/
|
||||
protected function getRevisionRevertRoute(EntityTypeInterface $entity_type) {
|
||||
if ($entity_type->hasLinkTemplate('revision_revert')) {
|
||||
$route = new Route($entity_type->getLinkTemplate('revision_revert'));
|
||||
$route
|
||||
->setDefaults([
|
||||
'_form' => '\Drupal\opencase_cases\Form\OCActorCaseRelationRevisionRevertForm',
|
||||
'_title' => 'Revert to earlier revision',
|
||||
])
|
||||
->setRequirement('_permission', 'revert all actor-case relation revisions')
|
||||
->setOption('_admin_route', TRUE);
|
||||
|
||||
return $route;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the revision delete route.
|
||||
*
|
||||
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
|
||||
* The entity type.
|
||||
*
|
||||
* @return \Symfony\Component\Routing\Route|null
|
||||
* The generated route, if available.
|
||||
*/
|
||||
protected function getRevisionDeleteRoute(EntityTypeInterface $entity_type) {
|
||||
if ($entity_type->hasLinkTemplate('revision_delete')) {
|
||||
$route = new Route($entity_type->getLinkTemplate('revision_delete'));
|
||||
$route
|
||||
->setDefaults([
|
||||
'_form' => '\Drupal\opencase_cases\Form\OCActorCaseRelationRevisionDeleteForm',
|
||||
'_title' => 'Delete earlier revision',
|
||||
])
|
||||
->setRequirement('_permission', 'delete all actor-case relation revisions')
|
||||
->setOption('_admin_route', TRUE);
|
||||
|
||||
return $route;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the revision translation revert route.
|
||||
*
|
||||
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
|
||||
* The entity type.
|
||||
*
|
||||
* @return \Symfony\Component\Routing\Route|null
|
||||
* The generated route, if available.
|
||||
*/
|
||||
protected function getRevisionTranslationRevertRoute(EntityTypeInterface $entity_type) {
|
||||
if ($entity_type->hasLinkTemplate('translation_revert')) {
|
||||
$route = new Route($entity_type->getLinkTemplate('translation_revert'));
|
||||
$route
|
||||
->setDefaults([
|
||||
'_form' => '\Drupal\opencase_cases\Form\OCActorCaseRelationRevisionRevertTranslationForm',
|
||||
'_title' => 'Revert to earlier revision of a translation',
|
||||
])
|
||||
->setRequirement('_permission', 'revert all actor-case relation revisions')
|
||||
->setOption('_admin_route', TRUE);
|
||||
|
||||
return $route;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the settings form route.
|
||||
*
|
||||
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
|
||||
* The entity type.
|
||||
*
|
||||
* @return \Symfony\Component\Routing\Route|null
|
||||
* The generated route, if available.
|
||||
*/
|
||||
protected function getSettingsFormRoute(EntityTypeInterface $entity_type) {
|
||||
if (!$entity_type->getBundleEntityType()) {
|
||||
$route = new Route("/admin/structure/{$entity_type->id()}/settings");
|
||||
$route
|
||||
->setDefaults([
|
||||
'_form' => 'Drupal\opencase_cases\Form\OCActorCaseRelationSettingsForm',
|
||||
'_title' => "{$entity_type->getLabel()} settings",
|
||||
])
|
||||
->setRequirement('_permission', $entity_type->getAdminPermission())
|
||||
->setOption('_admin_route', TRUE);
|
||||
|
||||
return $route;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
use Drupal\Core\Entity\EntityListBuilder;
|
||||
use Drupal\Core\Link;
|
||||
|
||||
/**
|
||||
* Defines a class to build a listing of Actor-Case Relation entities.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCActorCaseRelationListBuilder extends EntityListBuilder {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildHeader() {
|
||||
$header['id'] = $this->t('Actor-Case Relation ID');
|
||||
$header['name'] = $this->t('Name');
|
||||
return $header + parent::buildHeader();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildRow(EntityInterface $entity) {
|
||||
/* @var \Drupal\opencase_cases\Entity\OCActorCaseRelation $entity */
|
||||
$row['id'] = $entity->id();
|
||||
$row['name'] = Link::createFromRoute(
|
||||
$entity->label(),
|
||||
'entity.oc_actor_case_relation.edit_form',
|
||||
['oc_actor_case_relation' => $entity->id()]
|
||||
);
|
||||
return $row + parent::buildRow($entity);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\StringTranslation\StringTranslationTrait;
|
||||
use Drupal\opencase_cases\Entity\OCActorCaseRelation;
|
||||
|
||||
|
||||
/**
|
||||
* Provides dynamic permissions for Actor-Case Relation of different types.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*
|
||||
*/
|
||||
class OCActorCaseRelationPermissions{
|
||||
|
||||
use StringTranslationTrait;
|
||||
|
||||
/**
|
||||
* Returns an array of node type permissions.
|
||||
*
|
||||
* @return array
|
||||
* The OCActorCaseRelation by bundle permissions.
|
||||
* @see \Drupal\user\PermissionHandlerInterface::getPermissions()
|
||||
*/
|
||||
public function generatePermissions() {
|
||||
$perms = [];
|
||||
|
||||
foreach (OCActorCaseRelation::loadMultiple() as $type) {
|
||||
$perms += $this->buildPermissions($type);
|
||||
}
|
||||
|
||||
return $perms;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of node permissions for a given node type.
|
||||
*
|
||||
* @param \Drupal\opencase_cases\Entity\OCActorCaseRelation $type
|
||||
* The OCActorCaseRelation type.
|
||||
*
|
||||
* @return array
|
||||
* An associative array of permission names and descriptions.
|
||||
*/
|
||||
protected function buildPermissions(OCActorCaseRelation $type) {
|
||||
$type_id = $type->id();
|
||||
$type_params = ['%type_name' => $type->label()];
|
||||
|
||||
return [
|
||||
"$type_id create entities" => [
|
||||
'title' => $this->t('Create new %type_name entities', $type_params),
|
||||
],
|
||||
"$type_id edit own entities" => [
|
||||
'title' => $this->t('Edit own %type_name entities', $type_params),
|
||||
],
|
||||
"$type_id edit any entities" => [
|
||||
'title' => $this->t('Edit any %type_name entities', $type_params),
|
||||
],
|
||||
"$type_id delete own entities" => [
|
||||
'title' => $this->t('Delete own %type_name entities', $type_params),
|
||||
],
|
||||
"$type_id delete any entities" => [
|
||||
'title' => $this->t('Delete any %type_name entities', $type_params),
|
||||
],
|
||||
"$type_id view revisions" => [
|
||||
'title' => $this->t('View %type_name revisions', $type_params),
|
||||
'description' => t('To view a revision, you also need permission to view the entity item.'),
|
||||
],
|
||||
"$type_id revert revisions" => [
|
||||
'title' => $this->t('Revert %type_name revisions', $type_params),
|
||||
'description' => t('To revert a revision, you also need permission to edit the entity item.'),
|
||||
],
|
||||
"$type_id delete revisions" => [
|
||||
'title' => $this->t('Delete %type_name revisions', $type_params),
|
||||
'description' => $this->t('To delete a revision, you also need permission to delete the entity item.'),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
58
modules/opencase_cases/src/OCActorCaseRelationStorage.php
Normal file
58
modules/opencase_cases/src/OCActorCaseRelationStorage.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Core\Language\LanguageInterface;
|
||||
use Drupal\opencase_cases\Entity\OCActorCaseRelationInterface;
|
||||
|
||||
/**
|
||||
* Defines the storage handler class for Actor-Case Relation entities.
|
||||
*
|
||||
* This extends the base storage class, adding required special handling for
|
||||
* Actor-Case Relation entities.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCActorCaseRelationStorage extends SqlContentEntityStorage implements OCActorCaseRelationStorageInterface {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function revisionIds(OCActorCaseRelationInterface $entity) {
|
||||
return $this->database->query(
|
||||
'SELECT vid FROM {oc_actor_case_relation_revision} WHERE id=:id ORDER BY vid',
|
||||
[':id' => $entity->id()]
|
||||
)->fetchCol();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function userRevisionIds(AccountInterface $account) {
|
||||
return $this->database->query(
|
||||
'SELECT vid FROM {oc_actor_case_relation_field_revision} WHERE uid = :uid ORDER BY vid',
|
||||
[':uid' => $account->id()]
|
||||
)->fetchCol();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function countDefaultLanguageRevisions(OCActorCaseRelationInterface $entity) {
|
||||
return $this->database->query('SELECT COUNT(*) FROM {oc_actor_case_relation_field_revision} WHERE id = :id AND default_langcode = 1', [':id' => $entity->id()])
|
||||
->fetchField();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function clearRevisionsLanguage(LanguageInterface $language) {
|
||||
return $this->database->update('oc_actor_case_relation_revision')
|
||||
->fields(['langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED])
|
||||
->condition('langcode', $language->getId())
|
||||
->execute();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\ContentEntityStorageInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Core\Language\LanguageInterface;
|
||||
use Drupal\opencase_cases\Entity\OCActorCaseRelationInterface;
|
||||
|
||||
/**
|
||||
* Defines the storage handler class for Actor-Case Relation entities.
|
||||
*
|
||||
* This extends the base storage class, adding required special handling for
|
||||
* Actor-Case Relation entities.
|
||||
*
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
interface OCActorCaseRelationStorageInterface extends ContentEntityStorageInterface {
|
||||
|
||||
/**
|
||||
* Gets a list of Actor-Case Relation revision IDs for a specific Actor-Case Relation.
|
||||
*
|
||||
* @param \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface $entity
|
||||
* The Actor-Case Relation entity.
|
||||
*
|
||||
* @return int[]
|
||||
* Actor-Case Relation revision IDs (in ascending order).
|
||||
*/
|
||||
public function revisionIds(OCActorCaseRelationInterface $entity);
|
||||
|
||||
/**
|
||||
* Gets a list of revision IDs having a given user as Actor-Case Relation author.
|
||||
*
|
||||
* @param \Drupal\Core\Session\AccountInterface $account
|
||||
* The user entity.
|
||||
*
|
||||
* @return int[]
|
||||
* Actor-Case Relation revision IDs (in ascending order).
|
||||
*/
|
||||
public function userRevisionIds(AccountInterface $account);
|
||||
|
||||
/**
|
||||
* Counts the number of revisions in the default language.
|
||||
*
|
||||
* @param \Drupal\opencase_cases\Entity\OCActorCaseRelationInterface $entity
|
||||
* The Actor-Case Relation entity.
|
||||
*
|
||||
* @return int
|
||||
* The number of revisions in the default language.
|
||||
*/
|
||||
public function countDefaultLanguageRevisions(OCActorCaseRelationInterface $entity);
|
||||
|
||||
/**
|
||||
* Unsets the language for all Actor-Case Relation with the given language.
|
||||
*
|
||||
* @param \Drupal\Core\Language\LanguageInterface $language
|
||||
* The language object.
|
||||
*/
|
||||
public function clearRevisionsLanguage(LanguageInterface $language);
|
||||
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\content_translation\ContentTranslationHandler;
|
||||
|
||||
/**
|
||||
* Defines the translation handler for oc_actor_case_relation.
|
||||
*/
|
||||
class OCActorCaseRelationTranslationHandler extends ContentTranslationHandler {
|
||||
|
||||
// Override here the needed methods from ContentTranslationHandler.
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\EntityTypeInterface;
|
||||
use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider;
|
||||
|
||||
/**
|
||||
* Provides routes for Actor-Case Relation type entities.
|
||||
*
|
||||
* @see Drupal\Core\Entity\Routing\AdminHtmlRouteProvider
|
||||
* @see Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider
|
||||
*/
|
||||
class OCActorCaseRelationTypeHtmlRouteProvider extends AdminHtmlRouteProvider {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getRoutes(EntityTypeInterface $entity_type) {
|
||||
$collection = parent::getRoutes($entity_type);
|
||||
|
||||
// Provide your custom entity routes here.
|
||||
return $collection;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
|
||||
/**
|
||||
* Provides a listing of Actor-Case Relation type entities.
|
||||
*/
|
||||
class OCActorCaseRelationTypeListBuilder extends ConfigEntityListBuilder {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildHeader() {
|
||||
$header['label'] = $this->t('Actor-Case Relation type');
|
||||
$header['id'] = $this->t('Machine name');
|
||||
return $header + parent::buildHeader();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildRow(EntityInterface $entity) {
|
||||
$row['label'] = $entity->label();
|
||||
$row['id'] = $entity->id();
|
||||
// You probably want a few more properties here...
|
||||
return $row + parent::buildRow($entity);
|
||||
}
|
||||
|
||||
}
|
@ -1,17 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities;
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\EntityAccessControlHandler;
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Core\Access\AccessResult;
|
||||
use Drupal\opencase_entities\CaseInvolvement;
|
||||
use Drupal\opencase_cases\CaseInvolvement;
|
||||
|
||||
/**
|
||||
* Access controller for the Case entity.
|
||||
*
|
||||
* @see \Drupal\opencase_entities\Entity\OCCase.
|
||||
* @see \Drupal\opencase_cases\Entity\OCCase.
|
||||
*/
|
||||
class OCCaseAccessControlHandler extends EntityAccessControlHandler {
|
||||
|
||||
@ -19,7 +19,7 @@ class OCCaseAccessControlHandler extends EntityAccessControlHandler {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
|
||||
/** @var \Drupal\opencase_entities\Entity\OCCaseInterface $entity */
|
||||
/** @var \Drupal\opencase_cases\Entity\OCCaseInterface $entity */
|
||||
switch ($operation) {
|
||||
case 'view':
|
||||
if (!$entity->isPublished()) {
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities;
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\EntityTypeInterface;
|
||||
use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider;
|
||||
@ -64,7 +64,7 @@ class OCCaseHtmlRouteProvider extends AdminHtmlRouteProvider {
|
||||
$route
|
||||
->setDefaults([
|
||||
'_title' => "{$entity_type->getLabel()} revisions",
|
||||
'_controller' => '\Drupal\opencase_entities\Controller\OCCaseController::revisionOverview',
|
||||
'_controller' => '\Drupal\opencase_cases\Controller\OCCaseController::revisionOverview',
|
||||
])
|
||||
->setRequirement('_permission', 'access case revisions')
|
||||
->setOption('_admin_route', TRUE);
|
||||
@ -87,8 +87,8 @@ class OCCaseHtmlRouteProvider extends AdminHtmlRouteProvider {
|
||||
$route = new Route($entity_type->getLinkTemplate('revision'));
|
||||
$route
|
||||
->setDefaults([
|
||||
'_controller' => '\Drupal\opencase_entities\Controller\OCCaseController::revisionShow',
|
||||
'_title_callback' => '\Drupal\opencase_entities\Controller\OCCaseController::revisionPageTitle',
|
||||
'_controller' => '\Drupal\opencase_cases\Controller\OCCaseController::revisionShow',
|
||||
'_title_callback' => '\Drupal\opencase_cases\Controller\OCCaseController::revisionPageTitle',
|
||||
])
|
||||
->setRequirement('_permission', 'access case revisions')
|
||||
->setOption('_admin_route', TRUE);
|
||||
@ -111,7 +111,7 @@ class OCCaseHtmlRouteProvider extends AdminHtmlRouteProvider {
|
||||
$route = new Route($entity_type->getLinkTemplate('revision_revert'));
|
||||
$route
|
||||
->setDefaults([
|
||||
'_form' => '\Drupal\opencase_entities\Form\OCCaseRevisionRevertForm',
|
||||
'_form' => '\Drupal\opencase_cases\Form\OCCaseRevisionRevertForm',
|
||||
'_title' => 'Revert to earlier revision',
|
||||
])
|
||||
->setRequirement('_permission', 'revert all case revisions')
|
||||
@ -135,7 +135,7 @@ class OCCaseHtmlRouteProvider extends AdminHtmlRouteProvider {
|
||||
$route = new Route($entity_type->getLinkTemplate('revision_delete'));
|
||||
$route
|
||||
->setDefaults([
|
||||
'_form' => '\Drupal\opencase_entities\Form\OCCaseRevisionDeleteForm',
|
||||
'_form' => '\Drupal\opencase_cases\Form\OCCaseRevisionDeleteForm',
|
||||
'_title' => 'Delete earlier revision',
|
||||
])
|
||||
->setRequirement('_permission', 'delete all case revisions')
|
||||
@ -159,7 +159,7 @@ class OCCaseHtmlRouteProvider extends AdminHtmlRouteProvider {
|
||||
$route = new Route($entity_type->getLinkTemplate('translation_revert'));
|
||||
$route
|
||||
->setDefaults([
|
||||
'_form' => '\Drupal\opencase_entities\Form\OCCaseRevisionRevertTranslationForm',
|
||||
'_form' => '\Drupal\opencase_cases\Form\OCCaseRevisionRevertTranslationForm',
|
||||
'_title' => 'Revert to earlier revision of a translation',
|
||||
])
|
||||
->setRequirement('_permission', 'revert all case revisions')
|
||||
@ -183,7 +183,7 @@ class OCCaseHtmlRouteProvider extends AdminHtmlRouteProvider {
|
||||
$route = new Route("/admin/structure/{$entity_type->id()}/settings");
|
||||
$route
|
||||
->setDefaults([
|
||||
'_form' => 'Drupal\opencase_entities\Form\OCCaseSettingsForm',
|
||||
'_form' => 'Drupal\opencase_cases\Form\OCCaseSettingsForm',
|
||||
'_title' => "{$entity_type->getLabel()} settings",
|
||||
])
|
||||
->setRequirement('_permission', $entity_type->getAdminPermission())
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities;
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
use Drupal\Core\Entity\EntityListBuilder;
|
||||
@ -9,7 +9,7 @@ use Drupal\Core\Link;
|
||||
/**
|
||||
* Defines a class to build a listing of Case entities.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCCaseListBuilder extends EntityListBuilder {
|
||||
|
||||
@ -27,7 +27,7 @@ class OCCaseListBuilder extends EntityListBuilder {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildRow(EntityInterface $entity) {
|
||||
/* @var $entity \Drupal\opencase_entities\Entity\OCCase */
|
||||
/* @var $entity \Drupal\opencase_cases\Entity\OCCase */
|
||||
$row['id'] = $entity->id();
|
||||
$row['name'] = Link::createFromRoute(
|
||||
$entity->label(),
|
@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities;
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Core\Language\LanguageInterface;
|
||||
use Drupal\opencase_entities\Entity\OCCaseInterface;
|
||||
use Drupal\opencase_cases\Entity\OCCaseInterface;
|
||||
|
||||
/**
|
||||
* Defines the storage handler class for Case entities.
|
||||
@ -13,7 +13,7 @@ use Drupal\opencase_entities\Entity\OCCaseInterface;
|
||||
* This extends the base storage class, adding required special handling for
|
||||
* Case entities.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
class OCCaseStorage extends SqlContentEntityStorage implements OCCaseStorageInterface {
|
||||
|
@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities;
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\ContentEntityStorageInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Core\Language\LanguageInterface;
|
||||
use Drupal\opencase_entities\Entity\OCCaseInterface;
|
||||
use Drupal\opencase_cases\Entity\OCCaseInterface;
|
||||
|
||||
/**
|
||||
* Defines the storage handler class for Case entities.
|
||||
@ -13,14 +13,14 @@ use Drupal\opencase_entities\Entity\OCCaseInterface;
|
||||
* This extends the base storage class, adding required special handling for
|
||||
* Case entities.
|
||||
*
|
||||
* @ingroup opencase_entities
|
||||
* @ingroup opencase_cases
|
||||
*/
|
||||
interface OCCaseStorageInterface extends ContentEntityStorageInterface {
|
||||
|
||||
/**
|
||||
* Gets a list of Case revision IDs for a specific Case.
|
||||
*
|
||||
* @param \Drupal\opencase_entities\Entity\OCCaseInterface $entity
|
||||
* @param \Drupal\opencase_cases\Entity\OCCaseInterface $entity
|
||||
* The Case entity.
|
||||
*
|
||||
* @return int[]
|
||||
@ -42,7 +42,7 @@ interface OCCaseStorageInterface extends ContentEntityStorageInterface {
|
||||
/**
|
||||
* Counts the number of revisions in the default language.
|
||||
*
|
||||
* @param \Drupal\opencase_entities\Entity\OCCaseInterface $entity
|
||||
* @param \Drupal\opencase_cases\Entity\OCCaseInterface $entity
|
||||
* The Case entity.
|
||||
*
|
||||
* @return int
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities;
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\content_translation\ContentTranslationHandler;
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities;
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\EntityAccessControlHandler;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
@ -11,7 +11,7 @@ use Drupal\Core\Access\AccessResult;
|
||||
* Defines the access control handler for the OCCaseType Config Entity.
|
||||
* Always allows viewing the label of the bundle.
|
||||
*
|
||||
* @see Drupal\opencase_entities\Entity\OCCaseType
|
||||
* @see Drupal\opencase_cases\Entity\OCCaseType
|
||||
*/
|
||||
class OCCaseTypeAccessControlHandler extends EntityAccessControlHandler {
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities;
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Entity\EntityTypeInterface;
|
||||
use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider;
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase_entities;
|
||||
namespace Drupal\opencase_cases;
|
||||
|
||||
use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
|
||||
use Drupal\Core\Entity\EntityInterface;
|
@ -0,0 +1,23 @@
|
||||
{#
|
||||
/**
|
||||
* @file
|
||||
* Default theme implementation to present a list of custom content entity types/bundles.
|
||||
*
|
||||
* Available variables:
|
||||
* - types: A collection of all the available custom entity types/bundles.
|
||||
* Each type/bundle contains the following:
|
||||
* - link: A link to add a content entity of this type.
|
||||
* - description: A description of this content entity types/bundle.
|
||||
*
|
||||
* @see template_preprocess_oc_actor_case_relation_content_add_list()
|
||||
*
|
||||
* @ingroup themeable
|
||||
*/
|
||||
#}
|
||||
{% spaceless %}
|
||||
<dl>
|
||||
{% for type in types %}
|
||||
<dt>{{ type.link }}</dt>
|
||||
{% endfor %}
|
||||
</dl>
|
||||
{% endspaceless %}
|
@ -0,0 +1,22 @@
|
||||
{#
|
||||
/**
|
||||
* @file oc_actor_case_relation.html.twig
|
||||
* Default theme implementation to present Actor-Case Relation data.
|
||||
*
|
||||
* This template is used when viewing Actor-Case Relation pages.
|
||||
*
|
||||
*
|
||||
* Available variables:
|
||||
* - content: A list of content items. Use 'content' to print all content, or
|
||||
* - attributes: HTML attributes for the container element.
|
||||
*
|
||||
* @see template_preprocess_oc_actor_case_relation()
|
||||
*
|
||||
* @ingroup themeable
|
||||
*/
|
||||
#}
|
||||
<div{{ attributes.addClass('oc_actor_case_relation') }}>
|
||||
{% if content %}
|
||||
{{- content -}}
|
||||
{% endif %}
|
||||
</div>
|
@ -16,7 +16,18 @@
|
||||
*/
|
||||
#}
|
||||
<div{{ attributes.addClass('oc_case') }}>
|
||||
{% if content %}
|
||||
{{- content -}}
|
||||
{% endif %}
|
||||
<h2>{{ title }}</h2>
|
||||
<div class="oc_entity">
|
||||
<div class="left">
|
||||
{{ base_fields.actors_involved }}
|
||||
{{ base_fields.changed }}
|
||||
{{ base_fields.created }}
|
||||
{{ base_fields.user_id }}
|
||||
</div>
|
||||
<div class="right">
|
||||
{% for field in other_fields %}
|
||||
{{ field }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1 @@
|
||||
<!-- Add you custom twig html here -->
|
@ -0,0 +1,28 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- facets.facet.involved_parties
|
||||
module:
|
||||
- facets
|
||||
- system
|
||||
theme:
|
||||
- bartik
|
||||
id: involvedparties
|
||||
theme: bartik
|
||||
region: sidebar_second
|
||||
weight: 0
|
||||
provider: null
|
||||
plugin: 'facet_block:involved_parties'
|
||||
settings:
|
||||
id: 'facet_block:involved_parties'
|
||||
label: 'Involved Parties'
|
||||
provider: facets
|
||||
label_display: visible
|
||||
block_id: involvedparties
|
||||
visibility:
|
||||
request_path:
|
||||
id: request_path
|
||||
pages: /opencase/reporting/cases
|
||||
negate: false
|
||||
context_mapping: { }
|
@ -2,27 +2,27 @@ langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- facets.facet.nationality
|
||||
- facets.facet.nationalities
|
||||
module:
|
||||
- facets
|
||||
- system
|
||||
theme:
|
||||
- bartik
|
||||
id: facet_nationality
|
||||
id: nationalities
|
||||
theme: bartik
|
||||
region: sidebar_second
|
||||
weight: 0
|
||||
provider: null
|
||||
plugin: 'facet_block:nationality'
|
||||
plugin: 'facet_block:nationalities'
|
||||
settings:
|
||||
id: 'facet_block:nationality'
|
||||
label: 'Nationality'
|
||||
id: 'facet_block:nationalities'
|
||||
label: Nationalities
|
||||
provider: facets
|
||||
label_display: visible
|
||||
block_id: facet_nationality
|
||||
block_id: nationalities
|
||||
visibility:
|
||||
request_path:
|
||||
id: request_path
|
||||
pages: '/opencase/reporting/clients'
|
||||
pages: /opencase/reporting/clients
|
||||
negate: false
|
||||
context_mapping: { }
|
@ -23,6 +23,6 @@ settings:
|
||||
visibility:
|
||||
request_path:
|
||||
id: request_path
|
||||
pages: '/opencase/reporting/*'
|
||||
pages: /opencase/reporting/volunteers
|
||||
negate: false
|
||||
context_mapping: { }
|
@ -0,0 +1,29 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- facets.facet.outcome
|
||||
module:
|
||||
- facets
|
||||
- system
|
||||
theme:
|
||||
- bartik
|
||||
id: outcome
|
||||
theme: bartik
|
||||
region: sidebar_second
|
||||
weight: 0
|
||||
provider: null
|
||||
plugin: 'facet_block:outcome'
|
||||
settings:
|
||||
id: 'facet_block:outcome'
|
||||
label: Outcome
|
||||
provider: facets
|
||||
label_display: visible
|
||||
block_id: outcome
|
||||
visibility:
|
||||
request_path:
|
||||
id: request_path
|
||||
pages: /opencase/reporting/cases
|
||||
negate: false
|
||||
context_mapping: { }
|
||||
|
@ -10,7 +10,7 @@ id: asylum_status
|
||||
name: 'Asylum status'
|
||||
url_alias: asylum_status
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_asylum_status
|
||||
facet_source_id: 'search_api:views_page__reporting_clients__page_1'
|
@ -10,7 +10,7 @@ id: asylum_status_export
|
||||
name: 'Asylum status'
|
||||
url_alias: asylum_status
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_asylum_status
|
||||
facet_source_id: 'search_api:views_data_export__reporting_clients__data_export_1'
|
@ -10,7 +10,7 @@ id: created
|
||||
name: Created
|
||||
url_alias: created
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: created
|
||||
facet_source_id: 'search_api:views_page__reporting_clients__page_1'
|
@ -9,7 +9,7 @@ id: created_export
|
||||
name: 'Created - Export'
|
||||
url_alias: created
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: created
|
||||
facet_source_id: 'search_api:views_data_export__reporting_clients__data_export_1'
|
@ -10,7 +10,7 @@ id: disability
|
||||
name: 'Disability'
|
||||
url_alias: disability
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_disability
|
||||
facet_source_id: 'search_api:views_page__reporting_clients__page_1'
|
@ -10,7 +10,7 @@ id: disability_export
|
||||
name: 'Disability'
|
||||
url_alias: disability
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_disability
|
||||
facet_source_id: 'search_api:views_data_export__reporting_clients__data_export_1'
|
@ -10,7 +10,7 @@ id: gender_identified_with
|
||||
name: 'Gender Identity'
|
||||
url_alias: gender_identified_with
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_gender_identified_with
|
||||
facet_source_id: 'search_api:views_page__reporting_clients__page_1'
|
@ -10,7 +10,7 @@ id: gender_identified_with_export
|
||||
name: 'Gender Identity'
|
||||
url_alias: gender_identified_with
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_gender_identified_with
|
||||
facet_source_id: 'search_api:views_data_export__reporting_clients__data_export_1'
|
@ -0,0 +1,62 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- search_api.index.opencase_reporting_cases
|
||||
- views.view.reporting_cases
|
||||
module:
|
||||
- search_api
|
||||
id: involved_parties
|
||||
name: 'Involved Parties'
|
||||
url_alias: involved_parties
|
||||
weight: 0
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: actors_involved
|
||||
facet_source_id: 'search_api:views_page__reporting_cases__page_1'
|
||||
widget:
|
||||
type: checkbox
|
||||
config:
|
||||
show_numbers: false
|
||||
soft_limit: 0
|
||||
soft_limit_settings:
|
||||
show_less_label: 'Show less'
|
||||
show_more_label: 'Show more'
|
||||
show_reset_link: false
|
||||
reset_text: 'Show all'
|
||||
hide_reset_when_no_selection: false
|
||||
query_operator: or
|
||||
use_hierarchy: false
|
||||
expand_hierarchy: false
|
||||
enable_parent_when_child_gets_disabled: true
|
||||
hard_limit: 0
|
||||
exclude: false
|
||||
only_visible_when_facet_source_is_visible: true
|
||||
processor_configs:
|
||||
display_value_widget_order:
|
||||
processor_id: display_value_widget_order
|
||||
weights:
|
||||
sort: 40
|
||||
settings:
|
||||
sort: ASC
|
||||
exclude_specified_items:
|
||||
processor_id: exclude_specified_items
|
||||
weights:
|
||||
build: 50
|
||||
settings:
|
||||
exclude: client
|
||||
regex: true
|
||||
translate_entity:
|
||||
processor_id: translate_entity
|
||||
weights:
|
||||
build: 5
|
||||
settings: { }
|
||||
url_processor_handler:
|
||||
processor_id: url_processor_handler
|
||||
weights:
|
||||
pre_query: 50
|
||||
build: 15
|
||||
settings: { }
|
||||
empty_behavior:
|
||||
behavior: none
|
||||
show_title: false
|
@ -0,0 +1,55 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- search_api.index.opencase_reporting_cases
|
||||
- views.view.reporting_cases
|
||||
module:
|
||||
- search_api
|
||||
id: involved_parties_export
|
||||
name: 'Involved Parties (Export)'
|
||||
url_alias: involved_parties
|
||||
weight: 0
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: actors_involved
|
||||
facet_source_id: 'search_api:views_data_export__reporting_cases__data_export_1'
|
||||
widget:
|
||||
type: checkbox
|
||||
config:
|
||||
show_numbers: false
|
||||
soft_limit: 0
|
||||
soft_limit_settings:
|
||||
show_less_label: 'Show less'
|
||||
show_more_label: 'Show more'
|
||||
show_reset_link: false
|
||||
reset_text: 'Show all'
|
||||
hide_reset_when_no_selection: false
|
||||
query_operator: or
|
||||
use_hierarchy: false
|
||||
expand_hierarchy: false
|
||||
enable_parent_when_child_gets_disabled: true
|
||||
hard_limit: 0
|
||||
exclude: false
|
||||
only_visible_when_facet_source_is_visible: true
|
||||
processor_configs:
|
||||
display_value_widget_order:
|
||||
processor_id: display_value_widget_order
|
||||
weights:
|
||||
sort: 40
|
||||
settings:
|
||||
sort: ASC
|
||||
translate_entity:
|
||||
processor_id: translate_entity
|
||||
weights:
|
||||
build: 5
|
||||
settings: { }
|
||||
url_processor_handler:
|
||||
processor_id: url_processor_handler
|
||||
weights:
|
||||
pre_query: 50
|
||||
build: 15
|
||||
settings: { }
|
||||
empty_behavior:
|
||||
behavior: none
|
||||
show_title: false
|
@ -10,7 +10,7 @@ id: languages
|
||||
name: 'Languages'
|
||||
url_alias: languages
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_languages_spoken
|
||||
facet_source_id: 'search_api:views_page__reporting_clients__page_1'
|
@ -10,7 +10,7 @@ id: languages_export
|
||||
name: 'Languages'
|
||||
url_alias: languages
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_languages_spoken
|
||||
facet_source_id: 'search_api:views_data_export__reporting_clients__data_export_1'
|
@ -6,13 +6,13 @@ dependencies:
|
||||
- views.view.reporting_clients
|
||||
module:
|
||||
- search_api
|
||||
id: nationality
|
||||
name: 'Nationality'
|
||||
url_alias: nationality
|
||||
id: nationalities
|
||||
name: Nationalities
|
||||
url_alias: nationalities
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_nationality
|
||||
field_identifier: field_nationalities
|
||||
facet_source_id: 'search_api:views_page__reporting_clients__page_1'
|
||||
widget:
|
||||
type: checkbox
|
@ -3,19 +3,18 @@ status: true
|
||||
dependencies:
|
||||
config:
|
||||
- search_api.index.opencase_reporting_clients
|
||||
- views.view.reporting_clients
|
||||
module:
|
||||
- search_api
|
||||
id: nationality_export
|
||||
name: 'Nationality'
|
||||
url_alias: nationality
|
||||
- views_data_export
|
||||
id: nationalities_export
|
||||
name: Nationalities-export
|
||||
url_alias: nationalities_export
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_nationality
|
||||
field_identifier: field_nationalities
|
||||
facet_source_id: 'search_api:views_data_export__reporting_clients__data_export_1'
|
||||
widget:
|
||||
type: checkbox
|
||||
type: links
|
||||
config:
|
||||
show_numbers: false
|
||||
soft_limit: 0
|
||||
@ -30,6 +29,18 @@ hard_limit: 0
|
||||
exclude: false
|
||||
only_visible_when_facet_source_is_visible: true
|
||||
processor_configs:
|
||||
active_widget_order:
|
||||
processor_id: active_widget_order
|
||||
weights:
|
||||
sort: 20
|
||||
settings:
|
||||
sort: DESC
|
||||
count_widget_order:
|
||||
processor_id: count_widget_order
|
||||
weights:
|
||||
sort: 30
|
||||
settings:
|
||||
sort: DESC
|
||||
display_value_widget_order:
|
||||
processor_id: display_value_widget_order
|
||||
weights:
|
@ -10,7 +10,7 @@ id: osic_level
|
||||
name: 'OSIC level'
|
||||
url_alias: osic_level
|
||||
weight: 0
|
||||
min_count: 1
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_osic_level
|
||||
facet_source_id: 'search_api:views_page__reporting_volunteers__page_1'
|
@ -3,11 +3,10 @@ status: true
|
||||
dependencies:
|
||||
config:
|
||||
- search_api.index.opencase_reporting_volunteers
|
||||
- views.view.reporting_volunteers
|
||||
module:
|
||||
- search_api
|
||||
- views_data_export
|
||||
id: osic_level_export
|
||||
name: 'OSIC level (Export)'
|
||||
name: 'OSIC level Export'
|
||||
url_alias: osic_level
|
||||
weight: 0
|
||||
min_count: 1
|
||||
@ -15,7 +14,7 @@ show_only_one_result: false
|
||||
field_identifier: field_osic_level
|
||||
facet_source_id: 'search_api:views_data_export__reporting_volunteers__data_export_1'
|
||||
widget:
|
||||
type: checkbox
|
||||
type: links
|
||||
config:
|
||||
show_numbers: false
|
||||
soft_limit: 0
|
||||
@ -30,6 +29,18 @@ hard_limit: 0
|
||||
exclude: false
|
||||
only_visible_when_facet_source_is_visible: true
|
||||
processor_configs:
|
||||
active_widget_order:
|
||||
processor_id: active_widget_order
|
||||
weights:
|
||||
sort: 20
|
||||
settings:
|
||||
sort: DESC
|
||||
count_widget_order:
|
||||
processor_id: count_widget_order
|
||||
weights:
|
||||
sort: 30
|
||||
settings:
|
||||
sort: DESC
|
||||
display_value_widget_order:
|
||||
processor_id: display_value_widget_order
|
||||
weights:
|
@ -0,0 +1,52 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- search_api.index.opencase_reporting_cases
|
||||
- views.view.reporting_cases
|
||||
module:
|
||||
- search_api
|
||||
id: outcome
|
||||
name: Outcome
|
||||
url_alias: outcome
|
||||
weight: 0
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_outcome
|
||||
facet_source_id: 'search_api:views_page__reporting_cases__page_1'
|
||||
widget:
|
||||
type: checkbox
|
||||
config:
|
||||
show_numbers: true
|
||||
soft_limit: 0
|
||||
soft_limit_settings:
|
||||
show_less_label: 'Show less'
|
||||
show_more_label: 'Show more'
|
||||
show_reset_link: false
|
||||
reset_text: 'Show all'
|
||||
hide_reset_when_no_selection: false
|
||||
query_operator: or
|
||||
use_hierarchy: false
|
||||
expand_hierarchy: false
|
||||
enable_parent_when_child_gets_disabled: true
|
||||
hard_limit: 0
|
||||
exclude: false
|
||||
only_visible_when_facet_source_is_visible: false
|
||||
processor_configs:
|
||||
display_value_widget_order:
|
||||
processor_id: display_value_widget_order
|
||||
weights:
|
||||
sort: 40
|
||||
settings:
|
||||
sort: ASC
|
||||
url_processor_handler:
|
||||
processor_id: url_processor_handler
|
||||
weights:
|
||||
pre_query: 50
|
||||
build: 15
|
||||
settings: { }
|
||||
empty_behavior:
|
||||
behavior: text
|
||||
text_format: plain_text
|
||||
text: ''
|
||||
show_title: false
|
@ -0,0 +1,52 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- search_api.index.opencase_reporting_cases
|
||||
- views.view.reporting_cases
|
||||
module:
|
||||
- search_api
|
||||
id: outcome_export
|
||||
name: Outcome (Export)
|
||||
url_alias: outcome
|
||||
weight: 0
|
||||
min_count: 0
|
||||
show_only_one_result: false
|
||||
field_identifier: field_outcome
|
||||
facet_source_id: 'search_api:views_data_export__reporting_cases__data_export_1'
|
||||
widget:
|
||||
type: checkbox
|
||||
config:
|
||||
show_numbers: true
|
||||
soft_limit: 0
|
||||
soft_limit_settings:
|
||||
show_less_label: 'Show less'
|
||||
show_more_label: 'Show more'
|
||||
show_reset_link: false
|
||||
reset_text: 'Show all'
|
||||
hide_reset_when_no_selection: false
|
||||
query_operator: or
|
||||
use_hierarchy: false
|
||||
expand_hierarchy: false
|
||||
enable_parent_when_child_gets_disabled: true
|
||||
hard_limit: 0
|
||||
exclude: false
|
||||
only_visible_when_facet_source_is_visible: false
|
||||
processor_configs:
|
||||
display_value_widget_order:
|
||||
processor_id: display_value_widget_order
|
||||
weights:
|
||||
sort: 40
|
||||
settings:
|
||||
sort: ASC
|
||||
url_processor_handler:
|
||||
processor_id: url_processor_handler
|
||||
weights:
|
||||
pre_query: 50
|
||||
build: 15
|
||||
settings: { }
|
||||
empty_behavior:
|
||||
behavior: text
|
||||
text_format: plain_text
|
||||
text: ''
|
||||
show_title: false
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user