public function YoastSeoConfigForm::submitForm in Real-time SEO for Drupal 8
Form submission handler.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Overrides FormInterface::submitForm
File
- src/
Form/ YoastSeoConfigForm.php, line 66
Class
- YoastSeoConfigForm
- Class YoastSeoConfigForm.
Namespace
Drupal\yoast_seo\FormCode
public function submitForm(array &$form, FormStateInterface $form_state) {
$yoast_seo_manager = \Drupal::service('yoast_seo.manager');
// Get the available entity types Yoast SEO supports.
$entity_types = $this
->getAvailableEntityTypes();
// Retrieve the form values.
$values = $form_state
->getValues();
// Fields to attach.
$to_attach = [];
// Fields to detach.
$to_detach = [];
// Foreach entity types Yoast SEO can be enable for, check the bundle the
// administrator wants to enable/disable Yoast SEO for.
foreach ($entity_types as $entity_type_id => $entity_type_label) {
// Get the available bundles Yoast SEO supports.
$bundles = $yoast_seo_manager
->getAvailableBundles($entity_type_id);
// Get the bundles Yoast SEO has been enabled for.
$enabled_bundles = $yoast_seo_manager
->getEnabledBundles($entity_type_id);
// Foreach available bundles.
foreach ($bundles as $bundle_id => $bundle_label) {
// Yoast SEO is required to be enabled for.
if (isset($values[$entity_type_id][$bundle_id]) && $values[$entity_type_id][$bundle_id] !== 0 && !in_array($bundle_id, $enabled_bundles)) {
$to_attach[$entity_type_id][] = $bundle_id;
}
elseif (isset($values[$entity_type_id][$bundle_id]) && $values[$entity_type_id][$bundle_id] === 0 && in_array($bundle_id, $enabled_bundles)) {
$to_detach[$entity_type_id][] = $bundle_id;
}
}
}
// Process fields to be attached.
if (!empty($to_attach)) {
// Add field to content view in case not already attached.
$yoast_seo_manager
->attachFieldHandlerToContentView();
// Attach fields to content types.
foreach ($to_attach as $entity_type_id => $bundles) {
foreach ($bundles as $bundle_id) {
$yoast_seo_manager
->attachYoastSeoFields($entity_type_id, $bundle_id);
}
}
}
// Process fields to be detached.
if (!empty($to_detach)) {
// View management. If Yoast SEO is going to be deactivated for all
// fields related to nodes.
// Then we first detach the field from the view.
if (!empty($to_detach['node'])) {
$node_enabled_bundles = $yoast_seo_manager
->getEnabledBundles('node');
// If list of fields to detach is equal to the currently enabled
// bundles for node,
// then we should remove the fields from the view.
if (count($node_enabled_bundles) == count($to_detach['node'])) {
$yoast_seo_manager
->detachFieldHandlerFromContentView();
}
}
// Detach fields from content types.
foreach ($to_detach as $entity_type_id => $bundles) {
foreach ($bundles as $bundle_id) {
$yoast_seo_manager
->detachYoastSeoFields($entity_type_id, $bundle_id);
}
}
}
\Drupal::messenger()
->addMessage($this
->t('Real-time SEO configuration by bundles has been saved successfully.'));
}