| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Install, update and uninstall functions for the AddToAny module.
 
-  */
 
- use Drupal\Core\Entity\Entity\EntityViewDisplay;
 
- use Drupal\node\Entity\NodeType;
 
- /**
 
-  * Implements hook_install().
 
-  */
 
- function addtoany_install() {
 
-   // Build a structured list of node bundles and view modes that have AddToAny
 
-   // enabled by default.
 
-   $node_enable_by_default = [
 
-     'article' => ['default', 'teaser'],
 
-     'page' => ['default', 'teaser'],
 
-   ];
 
-   // Get the config entity storage handler.
 
-   $storage = \Drupal::entityTypeManager()->getStorage('entity_view_display');
 
-   foreach ($node_enable_by_default as $bundle => $viewmodes) {
 
-     // Set a default weight per node type.
 
-     $display_weight = ($bundle == 'article') ? 5 : 101;
 
-     foreach ($viewmodes as $viewmode) {
 
-       // Get the config entity for this bundle and view mode.
 
-       $display = $storage->load('node.' . $bundle . '.' . $viewmode);
 
-       // Enable the AddToAny extra field and save the config.
 
-       if (!empty($display)) {
 
-         $display->setComponent('addtoany', ['weight' => $display_weight])->save();
 
-       }
 
-     }
 
-   }
 
- }
 
- /**
 
-  * Migrate global placement settings to settings per view mode.
 
-  */
 
- function addtoany_update_8101(&$sandbox) {
 
-   $config_factory = \Drupal::configFactory();
 
-   // Gather the settings we need to migrate.
 
-   $addtoany_settings = $config_factory->getEditable('addtoany.settings');
 
-   $node_types = $addtoany_settings->getOriginal('nodetypes');
 
-   $display_in_teasers = $addtoany_settings->getOriginal('display_in_teasers');
 
-   $display_in_nodecont = $addtoany_settings->getOriginal('display_in_nodecont');
 
-   $display_weight = $addtoany_settings->getOriginal('display_weight');
 
-   $new_display_weight = $display_weight;
 
-   // The entity display repository stores which view modes are enabled.
 
-   $entity_display_repository = \Drupal::getContainer()->get('entity_display.repository');
 
-   // Check if AddToAny is currently shown on at least one node type.
 
-   if (!empty($node_types) && $display_in_nodecont) {
 
-     // Loop over the AddToAny-enabled node types.
 
-     foreach ($node_types as $bundle) {
 
-       // Get enabled view modes.
 
-       $view_modes = $entity_display_repository->getViewModeOptionsByBundle('node', $bundle);
 
-       // If the teaser view mode is enabled but the old settings excluded it,
 
-       // take it out.
 
-       if (!empty($view_modes['teaser']) && $display_in_teasers == FALSE) {
 
-         unset($view_modes['teaser']);
 
-       }
 
-       // Check if the old default weight was set.
 
-       if ($display_weight == 10) {
 
-         // Set the new default weight per node type.
 
-         $new_display_weight = ($bundle == 'article') ? 5 : 101;
 
-       }
 
-       // Loop over the view modes and apply new settings to match the old.
 
-       foreach ($view_modes as $view_mode => $view_mode_info) {
 
-         $display = EntityViewDisplay::load('node.' . $bundle . '.' . $view_mode);
 
-         $display->setComponent('addtoany', ['weight' => $new_display_weight])->save();
 
-       }
 
-     }
 
-   }
 
-   // Convert Display Suite fields to regular "extra fields".
 
-   if (\Drupal::moduleHandler()->moduleExists('ds')) {
 
-     // The DsField implementation only supported node entities.
 
-     $all_node_types = NodeType::loadMultiple();
 
-     foreach ($all_node_types as $node_type) {
 
-       // Get enabled view modes.
 
-       $view_modes = $entity_display_repository->getViewModeOptionsByBundle('node', $node_type->id());
 
-       // Loop over the view modes and apply new settings to match the old.
 
-       foreach ($view_modes as $view_mode => $view_mode_info) {
 
-         // Get the entity view display config entity.
 
-         $display = EntityViewDisplay::load('node.' . $node_type->id() . '.' . $view_mode);
 
-         // Check if this view mode uses Display Suite fields and if the Display
 
-         // Suite AddToAny field ("addtoany_field") was enabled.
 
-         $ds_fields = $display->getThirdPartySetting('ds', 'fields');
 
-         if (!empty($ds_fields) && isset($ds_fields['addtoany_field'])) {
 
-           // Remove the DS field, add the extra field.
 
-           unset($ds_fields['addtoany_field']);
 
-           $display->setComponent('addtoany');
 
-           // Keep the rest of the DS fields.
 
-           $display->setThirdPartySetting('ds', 'fields', $ds_fields);
 
-           // Find where the DS field was placed and put the AddToAny extra field
 
-           // in its place.
 
-           $ds_regions = $display->getThirdPartySetting('ds', 'regions');
 
-           foreach ($ds_regions as $label => $ds_region_fields) {
 
-             $key = array_search('addtoany_field', $ds_region_fields);
 
-             if ($key !== FALSE) {
 
-               $ds_regions[$label][$key] = 'addtoany';
 
-             }
 
-           }
 
-           // Apply the altered region settings.
 
-           $display->setThirdPartySetting('ds', 'regions', $ds_regions);
 
-           // Save the view mode.
 
-           $display->save();
 
-         }
 
-       }
 
-     }
 
-   }
 
-   // Finally, clean up no longer used settings.
 
-   $addtoany_settings->clear('nodetypes')
 
-     ->clear('display_in_teasers')
 
-     ->clear('display_in_nodecont')
 
-     ->clear('display_weight')
 
-     ->save();
 
- }
 
 
  |