Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
entityreference_live_preview
Manage
Activity
Members
Labels
Plan
Wiki
Custom issue tracker
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
project
entityreference_live_preview
Commits
bf415829
Commit
bf415829
authored
1 year ago
by
oleksandr p.
Committed by
Kostia Bohach
1 year ago
Browse files
Options
Downloads
Patches
Plain Diff
#3417231
Coding standards and replace deprecated functions
parent
196b21f4
No related branches found
Branches containing commit
No related tags found
1 merge request
!3
#3417231 Coding standards and replace deprecated functions
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
entityreference_live_preview.module
+73
-58
73 additions, 58 deletions
entityreference_live_preview.module
with
73 additions
and
58 deletions
entityreference_live_preview.module
+
73
−
58
View file @
bf415829
...
...
@@ -5,17 +5,18 @@
* Provides a live preview for the Entity Reference autocomplete widget.
*/
use
Drupal\entity_reference
\Plugin\Field\FieldWidget\AutocompleteWidget
;
use
Drupal\Core\Form\FormStateInterface
;
use
Drupal\Core\Field\WidgetInterface
;
use
Drupal\Core\Field\FieldDefinitionInterface
;
use
Drupal\Component\Utility\NestedArray
;
use
Drupal\Core\Field\FieldDefinitionInterface
;
use
Drupal\Core\Field\WidgetInterface
;
use
Drupal\Core\Form\FormStateInterface
;
use
Drupal\field\Entity\FieldConfig
;
use
Drupal\field\Entity\FieldStorageConfig
;
/**
* Implements hook_field_widget_form_alter().
*/
function
entityreference_live_preview_field_widget_form_alter
(
&
$element
,
FormStateInterface
$form_state
,
$context
)
{
if
(
$context
[
'items'
]
->
getFieldDefinition
()
->
getType
()
==
'entity_reference'
if
(
$context
[
'items'
]
->
getFieldDefinition
()
->
getType
()
==
=
'entity_reference'
&&
$context
[
'widget'
]
->
getThirdPartySetting
(
'entityreference_live_preview'
,
'enabled'
))
{
$field_name
=
$context
[
'items'
]
->
getFieldDefinition
()
->
getName
();
...
...
@@ -32,20 +33,20 @@ function entityreference_live_preview_field_widget_form_alter(&$element, FormSta
/*$entity_type = $context['instance']['entity_type'];
$bundle = $context['instance']['bundle'];*/
$output
=
array
(
$output
=
[
'#weight'
=>
10000
,
'#prefix'
=>
'<div id="'
.
$ajax_id
.
'">'
,
'#prefix'
=>
'<div id="'
.
$ajax_id
.
'">'
,
'#suffix'
=>
'</div>'
,
)
;
]
;
//
TODO: c
urrently only supports the target preview type
//
@todo C
urrently only supports the target preview type
.
$target_type
=
$context
[
'items'
]
->
getFieldDefinition
()
->
getFieldStorageDefinition
()
->
getSettings
()[
'target_type'
];
$view_builder
=
\Drupal
::
service
(
'entity_type.manager'
)
->
getViewBuilder
(
$target_type
);
if
(
$form_state
->
getValues
())
{
$context
[
'widget'
]
->
extractFormValues
(
$context
[
'items'
],
$form_state
->
getCompleteForm
(),
$form_state
);
}
$items
=
$multiple
?
$context
[
'items'
]
:
array
(
$context
[
'items'
][
$context
[
'delta'
]]
)
;
$items
=
$multiple
?
$context
[
'items'
]
:
[
$context
[
'items'
][
$context
[
'delta'
]]
]
;
foreach
(
$items
as
$item
)
{
if
(
$item
->
entity
)
{
$view
=
$view_builder
->
view
(
$item
->
entity
,
$context
[
'widget'
]
->
getThirdPartySetting
(
'entityreference_live_preview'
,
'mode'
));
...
...
@@ -54,78 +55,90 @@ function entityreference_live_preview_field_widget_form_alter(&$element, FormSta
}
$element
[
'entityreference_live_preview'
]
=
$output
;
if
(
$multiple
)
{
$element
[
'#ajax'
]
=
array
(
$element
[
'#ajax'
]
=
[
'callback'
=>
'entityreference_live_preview_multiple_ajax_render'
,
'wrapper'
=>
$ajax_id
,
)
;
]
;
$element
[
'#theme_wrappers'
][]
=
'entityreference_live_preview_suffix_wrapper'
;
}
else
{
$element
[
'target_id'
][
'#ajax'
]
=
array
(
$element
[
'target_id'
][
'#ajax'
]
=
[
'callback'
=>
'entityreference_live_preview_single_ajax_render'
,
'wrapper'
=>
$ajax_id
,
)
;
]
;
}
}
}
/**
* Implements hook_theme().
*/
function
entityreference_live_preview_theme
()
{
return
array
(
'entityreference_live_preview_suffix_wrapper'
=>
array
(
return
[
'entityreference_live_preview_suffix_wrapper'
=>
[
'template'
=>
'entityreference-live-preview-suffix-wrapper'
,
'render element'
=>
'element'
,
)
,
)
;
]
,
]
;
}
/**
* Implements template_preprocess_HOOK().
*/
function
template_preprocess_entityreference_live_preview_suffix_wrapper
(
&
$variables
)
{
$element
=
$variables
[
'element'
];
$variables
[
'original'
]
=
$element
[
'#children'
];
$variables
[
'preview'
]
=
render
(
$element
[
'entityreference_live_preview'
]);
}
/**
* Helper function for extract element.
*/
function
_entityreference_live_preview_extract_element
(
$form
,
FormStateInterface
$form_state
,
$backtrack
,
Array
$local_path
)
{
$trigger
=
$form_state
->
getTriggeringElement
();
$parents
=
array_merge
(
$backtrack
?
array_slice
(
$trigger
[
'#array_parents'
],
0
,
-
$backtrack
)
:
$trigger
[
'#array_parents'
],
$local_path
);
$element
=
NestedArray
::
getValue
(
$form
,
$parents
);
return
$element
;
return
NestedArray
::
getValue
(
$form
,
$parents
);
}
/**
* Function for single ajax render.
*/
function
entityreference_live_preview_single_ajax_render
(
$form
,
FormStateInterface
$form_state
)
{
return
_entityreference_live_preview_extract_element
(
$form
,
$form_state
,
1
,
array
(
'entityreference_live_preview'
)
);
return
_entityreference_live_preview_extract_element
(
$form
,
$form_state
,
1
,
[
'entityreference_live_preview'
]
);
}
/**
* Function for multiple ajax render.
*/
function
entityreference_live_preview_multiple_ajax_render
(
$form
,
$form_state
)
{
$element
=
_entityreference_live_preview_extract_element
(
$form
,
$form_state
,
0
,
array
(
'entityreference_live_preview'
)
);
$element
=
_entityreference_live_preview_extract_element
(
$form
,
$form_state
,
0
,
[
'entityreference_live_preview'
]
);
return
$element
;
}
/**
* Implements hook_entityreference_live_preview_supported_widgets().
*
* @todo
* Find a better way to name this function.
* @todo Find a better way to name this function.
*/
function
entityreference_live_preview_entityreference_live_preview_supported_widgets
()
{
return
array
(
return
[
'entityreference_autocomplete'
,
'options_select'
,
// See https://www.drupal.org/node/1295034
'entityreference_autocomplete_deluxe'
,
)
;
]
;
}
/**
* Implements hook_form_FORM_ID_alter() for field_ui_field_edit_form().
*/
function
entityreference_live_preview_field_widget_third_party_settings_form
(
WidgetInterface
$plugin
,
FieldDefinitionInterface
$field_definition
,
$view_mode
,
$form
,
FormStateInterface
$form_state
)
{
if
(
$field_definition
->
getType
()
==
'entity_reference'
)
{
# TODO: Default settings:
# enabled => FALSE
# preview_type => target
# mode => default
if
(
$field_definition
->
getType
()
===
'entity_reference'
)
{
// @todo Default settings:
// enabled => FALSE
// preview_type => target
// mode => default.
$preview_type
=
$form_state
->
getValue
([
'fields'
,
$field_definition
->
getName
(),
...
...
@@ -136,7 +149,7 @@ function entityreference_live_preview_field_widget_third_party_settings_form(Wid
],
$plugin
->
getThirdPartySetting
(
'entityreference_live_preview'
,
'preview_type'
));
// Load the display modes for the appropriate entity type.
if
(
$preview_type
==
'field'
)
{
if
(
$preview_type
==
=
'field'
)
{
// To preview the field, we use a display mode of the host entity.
$entity_type
=
$field_definition
->
getTargetEntityTypeId
();
}
...
...
@@ -146,30 +159,30 @@ function entityreference_live_preview_field_widget_third_party_settings_form(Wid
}
$options
=
\Drupal
::
service
(
'entity_display.repository'
)
->
getViewModeOptions
(
$entity_type
);
$element
[
'enabled'
]
=
array
(
$element
[
'enabled'
]
=
[
'#type'
=>
'checkbox'
,
'#title'
=>
t
(
'Live preview'
),
'#description'
=>
t
(
'Enable a live preview of the referenced entities.'
),
'#default_value'
=>
$plugin
->
getThirdPartySetting
(
'entityreference_live_preview'
,
'enabled'
),
)
;
]
;
$ajax_id
=
'entityreference-live-preview-mode-'
.
$field_definition
->
getName
()
.
'-wrapper'
;
$states
=
[
'visible'
=>
[
':input[name="fields['
.
$field_definition
->
getName
()
.
'][settings_edit_form][third_party_settings][entityreference_live_preview][enabled]"]'
=>
array
(
'checked'
=>
TRUE
)
]
];
$element
[
'preview_type'
]
=
array
(
$states
=
[
'visible'
=>
[
':input[name="fields['
.
$field_definition
->
getName
()
.
'][settings_edit_form][third_party_settings][entityreference_live_preview][enabled]"]'
=>
[
'checked'
=>
TRUE
]]
];
$element
[
'preview_type'
]
=
[
'#type'
=>
'radios'
,
'#title'
=>
t
(
'Live preview type'
),
'#options'
=>
array
(
'#options'
=>
[
'target'
=>
t
(
'Display the referenced entities directly.'
),
'field'
=>
t
(
'Display a preview of the entity reference field.'
),
)
,
]
,
'#default_value'
=>
$plugin
->
getThirdPartySetting
(
'entityreference_live_preview'
,
'preview_type'
),
'#states'
=>
$states
,
'#ajax'
=>
array
(
'#ajax'
=>
[
'callback'
=>
'entityreference_live_preview_type_ajax_callback'
,
'wrapper'
=>
$ajax_id
,
)
,
)
;
$element
[
'mode'
]
=
array
(
]
,
]
;
$element
[
'mode'
]
=
[
'#type'
=>
'select'
,
'#title'
=>
t
(
'Live preview display mode'
),
'#description'
=>
t
(
'Select the display mode to be used for generating the live preview.'
),
...
...
@@ -178,19 +191,21 @@ function entityreference_live_preview_field_widget_third_party_settings_form(Wid
'#states'
=>
$states
,
'#prefix'
=>
'<div id="'
.
$ajax_id
.
'">'
,
'#suffix'
=>
'</div>'
,
)
;
if
(
$plugin
->
getThirdPartySetting
(
'entityreference_live_preview'
,
'preview_type'
)
==
'field'
)
{
]
;
if
(
$plugin
->
getThirdPartySetting
(
'entityreference_live_preview'
,
'preview_type'
)
==
=
'field'
)
{
$element
[
'mode'
][
'#description'
]
.
=
' '
.
t
(
'For field previews, please select a display mode of the referencing entity.'
);
}
return
$element
;
}
}
/**
* Function for ajax callback.
*/
function
entityreference_live_preview_type_ajax_callback
(
$form
,
FormStateInterface
$form_state
)
{
$trigger
=
$form_state
->
getTriggeringElement
();
$parents
=
array_merge
(
array_slice
(
$trigger
[
'#array_parents'
],
0
,
-
2
),
array
(
'mode'
));
$element
=
NestedArray
::
getValue
(
$form
,
$parents
);
return
$element
;
$parents
=
array_merge
(
array_slice
(
$trigger
[
'#array_parents'
],
0
,
-
2
),
[
'mode'
]);
return
NestedArray
::
getValue
(
$form
,
$parents
);
}
/**
...
...
@@ -201,30 +216,30 @@ function entityreference_live_preview_type_ajax_callback($form, FormStateInterfa
* does not need to exist yet; this function can be called while creating it.
*/
function
_entityreference_live_preview_render_entity
(
$widget
,
$target
)
{
$entity_info
=
entity_get_info
(
$entity_type
);
$entity
=
(
object
)
array
(
$entity_info
=
\Drupal
::
entityTypeManager
()
->
getDefinition
(
$entity_type
);
$entity
=
(
object
)
[
$entity_info
[
'entity keys'
][
'bundle'
]
=>
$bundle
,
)
;
$field_info
=
f
ield
_info_field
(
$field_name
);
]
;
$field_info
=
F
ield
StorageConfig
::
loadByName
(
$entity_type
,
$field_name
);
$target_type
=
$field_info
[
'settings'
][
'target_type'
];
$instance_info
=
f
ield
_info_instance
(
$entity_type
,
$field_name
,
$bundl
e
);
$instance_info
=
F
ield
Config
::
loadByName
(
$entity_type
,
$bundle
,
$field_nam
e
);
$display
=
$instance_info
[
'widget'
][
'settings'
][
'entityreference_live_preview'
][
'mode'
];
switch
(
$instance_info
[
'widget'
][
'settings'
][
'entityreference_live_preview'
][
'preview_type'
])
{
case
'target'
:
$entities
=
\Drupal
::
service
(
'entity_type.manager'
)
->
getStorage
(
$target_type
)
->
load
(
array
(
$target_id
)
);
$entities
=
\Drupal
::
service
(
'entity_type.manager'
)
->
getStorage
(
$target_type
)
->
load
(
[
$target_id
]
);
foreach
(
$entities
as
$entity
)
{
if
(
!
entity
_
access
(
'view'
,
$target_type
,
$entity
))
{
if
(
!
$
entity
->
access
(
'view'
,
$target_type
))
{
return
''
;
}
}
return
entity_
view
(
$target_type
,
$entities
,
$display
);
return
\Drupal
::
entityTypeManager
()
->
getViewBuilder
(
$entities
)
->
view
(
$target_type
,
$display
);
case
'field'
:
$item
=
array
(
$item
=
[
'target_id'
=>
$target_id
,
'target_type'
=>
$target_type
,
)
;
]
;
return
field_view_value
(
$entity_type
,
$entity
,
$field_name
,
$item
,
$display
);
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment