243 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			243 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * @file
 | |
|  * Installation functions for Sitemap module.
 | |
|  */
 | |
| 
 | |
| use Drupal\sitemap\Plugin\Sitemap\Vocabulary;
 | |
| 
 | |
| /**
 | |
|  * Change sitemap configuration page permission to administer sitemap.
 | |
|  */
 | |
| function sitemap_update_8101() {
 | |
|   $roles = user_roles(FALSE, 'administer site configuration');
 | |
|   if (!empty($roles)) {
 | |
|     foreach ($roles as $rid => $role) {
 | |
|       user_role_grant_permissions($rid, ['administer sitemap']);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Update the CSS configuration setting to reflect the change in option wording.
 | |
|  */
 | |
| function sitemap_update_8102(&$sandbox) {
 | |
|   $config_factory = \Drupal::configFactory();
 | |
|   $config = $config_factory->getEditable('sitemap.settings');
 | |
|   if ($config->get('css')) {
 | |
|     $css = ($config->get('css') == TRUE) ? FALSE : TRUE;
 | |
|     $config->set('css', $css);
 | |
|   }
 | |
|   $config->save();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Update configuration for 2.x.
 | |
|  */
 | |
| function sitemap_update_8200(&$sandbox) {
 | |
|   $config_factory = \Drupal::configFactory();
 | |
|   $config = $config_factory->getEditable('sitemap.settings');
 | |
| 
 | |
|   // Update the config key for the CSS option.
 | |
|   $config->set('include_css', $config->get('css'));
 | |
|   $config->clear('css');
 | |
| 
 | |
|   // Remove the config for the RSS position option.
 | |
|   $show_rss = (boolean) $config->get('show_rss_links');
 | |
|   $config->clear('show_rss_links');
 | |
| 
 | |
|   $plugins = [];
 | |
|   $show_titles = $config->get('show_titles');
 | |
|   $order = $config->get('order');
 | |
|   $config->clear('show_titles');
 | |
|   $config->clear('order');
 | |
| 
 | |
|   // Update to the frontpage plugin.
 | |
|   $plugins['frontpage'] = [
 | |
|     'enabled' => (bool) $config->get('show_front'),
 | |
|     'weight' => $order['front'] ?? 0,
 | |
|     'settings' => [
 | |
|       'title' => $show_titles ? 'Front page' : '',
 | |
|       'rss' => $config->get('rss_front') && $show_rss ? '/' . $config->get('rss_front') : '',
 | |
|     ],
 | |
|   ];
 | |
|   $config->clear('show_front');
 | |
|   $config->clear('rss_front');
 | |
| 
 | |
|   // Update to the book plugin.
 | |
|   if ($books = $config->get('show_books')) {
 | |
|     foreach ($books as $bid => $enabled) {
 | |
|       $plugins['book:' . $bid] = [
 | |
|         'enabled' => (bool) $enabled,
 | |
|         'weight' => $order['books_' . $bid] ?? 0,
 | |
|         'settings' => [
 | |
|           'title' => sitemap_book_title_update($bid, $show_titles),
 | |
|           'show_expanded' => $config->get('books_expanded'),
 | |
|         ],
 | |
|       ];
 | |
|     }
 | |
|   }
 | |
|   $config->clear('show_books');
 | |
|   $config->clear('books_expanded');
 | |
| 
 | |
|   // Update to the menu plugin.
 | |
|   if ($menus = $config->get('show_menus')) {
 | |
|     foreach ($menus as $menu_id => $enabled) {
 | |
|       $plugins['menu:' . $menu_id] = [
 | |
|         'enabled' => (bool) $enabled,
 | |
|         'weight' => $order['menus_' . $menu_id] ?? 0,
 | |
|         'settings' => [
 | |
|           'title' => sitemap_menu_title_update($menu_id, $show_titles),
 | |
|           'show_disabled' => $config->get('show_menus_hidden'),
 | |
|         ],
 | |
|       ];
 | |
|     }
 | |
|   }
 | |
|   $config->clear('show_menus');
 | |
|   $config->clear('show_menus_hidden');
 | |
| 
 | |
|   // Update to the vocabulary plugin.
 | |
|   if ($vocabs = $config->get('show_vocabularies')) {
 | |
|     if (\Drupal::service('module_handler')->moduleExists('forum')) {
 | |
|       $forumVid = \Drupal::config('forum.settings')->get('vocabulary');
 | |
|     }
 | |
|     foreach ($vocabs as $vid => $enabled) {
 | |
|       $plugins['vocabulary:' . $vid] = [
 | |
|         'enabled' => (bool) $enabled,
 | |
|         'weight' => $order['vocabularies_' . $vid] ?? 0,
 | |
|         'settings' => [
 | |
|           'title' => $show_titles ? sitemap_vocab_title_update($vid) : '',
 | |
|           'show_description' => $config->get('show_description'),
 | |
|           'show_count' => $config->get('show_count'),
 | |
|           'term_depth' => sitemap_vocab_depth_update($config->get('vocabulary_depth')),
 | |
|           'term_count_threshold' => isset($formVid) && $forumVid == $vid ? sitemap_vocab_threshold_update($config->get('forum_threshold')) : sitemap_vocab_threshold_update($config->get('term_threshold')),
 | |
|           'customize_link' => $config->get('vocabulary_show_links'),
 | |
|           'term_link' => Vocabulary::DEFAULT_TERM_LINK,
 | |
|           'always_link' => $config->get('vocabulary_show_links'),
 | |
|           'enable_rss' => (bool) sitemap_vocab_depth_update($config->get('rss_taxonomy')),
 | |
|           'rss_link' => Vocabulary::DEFAULT_TERM_RSS_LINK,
 | |
|           'rss_depth' => sitemap_vocab_depth_update($config->get('rss_taxonomy')),
 | |
|         ],
 | |
|       ];
 | |
|     }
 | |
|   }
 | |
|   $config->clear('show_vocabularies');
 | |
|   $config->clear('show_description');
 | |
|   $config->clear('show_count');
 | |
|   $config->clear('vocabulary_depth');
 | |
|   $config->clear('vocabulary_show_links');
 | |
|   $config->clear('term_threshold');
 | |
|   $config->clear('forum_threshold');
 | |
|   $config->clear('rss_taxonomy');
 | |
| 
 | |
|   $config->set('plugins', $plugins);
 | |
| 
 | |
|   $config->save(TRUE);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Helper function to get a book title for the 2.x settings update.
 | |
|  *
 | |
|  * @param int $bid
 | |
|  *   The book id.
 | |
|  * @param bool $show_title
 | |
|  *   Determines if the title is shown.
 | |
|  *
 | |
|  * @return string
 | |
|  *   Returns the book label.
 | |
|  */
 | |
| function sitemap_book_title_update($bid, $show_title) {
 | |
|   if (!$show_title) {
 | |
|     return '';
 | |
|   }
 | |
|   else {
 | |
|     $book = \Drupal::service('entity_type.manager')->getStorage('node')->load($bid);
 | |
|     if ($book) {
 | |
|       return $book->label();
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Helper function to get a menu title from 1.x menu settings.
 | |
|  *
 | |
|  * @param string $menu_id
 | |
|  *   The menu's id.
 | |
|  * @param bool $show_title
 | |
|  *   Determines if the title is shown.
 | |
|  *
 | |
|  * @return string
 | |
|  *   Returns the title.
 | |
|  */
 | |
| function sitemap_menu_title_update($menu_id, $show_title) {
 | |
|   $config_factory = \Drupal::configFactory();
 | |
|   $config = $config_factory->getEditable('system.menu.' . $menu_id);
 | |
| 
 | |
|   $title = '';
 | |
|   if ($show_title) {
 | |
|     if ($thirdParty = $config->get('third_party_settings')) {
 | |
|       if (isset($thirdParty['sitemap']) && $setting = $thirdParty['sitemap']) {
 | |
|         if (isset($setting['sitemap_display_name'])) {
 | |
|           $title = $setting['sitemap_display_name'];
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     if (empty($title)) {
 | |
|       $title = $config->get('label');
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   $config->clear('third_party_settings.sitemap');
 | |
|   $config->save();
 | |
|   return $title;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Helper function to get a vocabulary title for the 2.x settings update.
 | |
|  *
 | |
|  * @param string $vid
 | |
|  *   The vocabulary id.
 | |
|  *
 | |
|  * @return string
 | |
|  *   Returns the vocabulary name.
 | |
|  */
 | |
| function sitemap_vocab_title_update($vid) {
 | |
|   $config_factory = \Drupal::configFactory();
 | |
|   $config = $config_factory->getEditable('taxonomy.vocabulary.' . $vid);
 | |
| 
 | |
|   return $config->get('name');
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Helper function to update the term_depth setting.
 | |
|  *
 | |
|  * @param int $value
 | |
|  *   The new Deph vocabulary value.
 | |
|  *
 | |
|  * @return int
 | |
|  *   Returns the value.
 | |
|  */
 | |
| function sitemap_vocab_depth_update($value) {
 | |
|   if ($value == -1 || $value > Vocabulary::DEPTH_MAX) {
 | |
|     return Vocabulary::DEPTH_MAX;
 | |
|   }
 | |
|   return $value;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Helper function to update the term_threshold and forum_threshold settings.
 | |
|  *
 | |
|  * @param int $value
 | |
|  *   The value to update the term_threshold and forum_threshold settings.
 | |
|  *
 | |
|  * @return int
 | |
|  *   Returns the value.
 | |
|  */
 | |
| function sitemap_vocab_threshold_update($value) {
 | |
|   if ($value == -1) {
 | |
|     return Vocabulary::THRESHOLD_DISABLED;
 | |
|   }
 | |
|   return $value;
 | |
| }
 |