Issue #1188388 by plach, peximo, YesCT | Gábor Hojtsy, fago, webchick, Bojhan, podarok, cosmicdreams, Berdir, aspilicious, bforchhammer, penyaskito: Added Entity translation UI in core.
2012-11-04 02:38:49 +00:00
<?php
/**
* @file
2013-06-25 19:16:20 +00:00
* Installation functions for Content Translation module.
Issue #1188388 by plach, peximo, YesCT | Gábor Hojtsy, fago, webchick, Bojhan, podarok, cosmicdreams, Berdir, aspilicious, bforchhammer, penyaskito: Added Entity translation UI in core.
2012-11-04 02:38:49 +00:00
*/
2017-08-21 05:01:00 +00:00
use Drupal\Core\Entity\Sql\SqlEntityStorageInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Url;
2016-02-26 11:12:40 +00:00
Issue #1188388 by plach, peximo, YesCT | Gábor Hojtsy, fago, webchick, Bojhan, podarok, cosmicdreams, Berdir, aspilicious, bforchhammer, penyaskito: Added Entity translation UI in core.
2012-11-04 02:38:49 +00:00
/**
* Implements hook_install().
*/
2013-06-25 19:16:20 +00:00
function content_translation_install() {
2013-01-07 11:36:47 +00:00
// Assign a fairly low weight to ensure our implementation of
// hook_module_implements_alter() is run among the last ones.
2013-06-25 19:16:20 +00:00
module_set_weight('content_translation', 10);
2016-04-12 01:30:08 +00:00
2014-05-04 17:19:57 +00:00
// Translation works when at least two languages are added.
2014-03-31 17:29:01 +00:00
if (count(\Drupal::languageManager()->getLanguages()) < 2) {
2016-04-12 01:30:08 +00:00
$t_args = [
':language_url' => Url::fromRoute('entity.configurable_language.collection')->toString()
];
2016-02-11 16:27:57 +00:00
$message = t('This site has only a single language enabled. <a href=":language_url">Add at least one more language</a> in order to translate content.', $t_args);
2013-01-07 11:36:47 +00:00
drupal_set_message($message, 'warning');
}
// Point the user to the content translation settings.
2016-04-12 01:30:08 +00:00
$t_args = [
':settings_url' => Url::fromRoute('language.content_settings_page')->toString()
];
Issue #2570355 by Sutharsan, stefan.r, kgoel, josephdpurcell, joelpittet, justAChris, dawehner, pfrenssen, pwolanin, David_Rothstein, catch: Replace remaining !placeholder and @placeholder with :placeholder for URLs
2015-09-22 06:16:37 +00:00
$message = t('<a href=":settings_url">Enable translation</a> for <em>content types</em>, <em>taxonomy vocabularies</em>, <em>accounts</em>, or any other element you wish to translate.', $t_args);
Issue #1188388 by plach, peximo, YesCT | Gábor Hojtsy, fago, webchick, Bojhan, podarok, cosmicdreams, Berdir, aspilicious, bforchhammer, penyaskito: Added Entity translation UI in core.
2012-11-04 02:38:49 +00:00
drupal_set_message($message, 'warning');
}
2015-11-12 22:14:00 +00:00
/**
* Rebuild the routes as the content translation routes have now new names.
*/
function content_translation_update_8001() {
\Drupal::service('router.builder')->rebuild();
}
2016-02-25 15:54:27 +00:00
/**
* Clear field type plugin caches to fix image field translatability.
*/
function content_translation_update_8002() {
\Drupal::service('plugin.manager.field.field_type')->clearCachedDefinitions();
}
2017-06-29 12:52:17 +00:00
/**
* Fix the initial values for content translation metadata fields.
*/
function content_translation_update_8400() {
$database = \Drupal::database();
/** @var \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager */
$content_translation_manager = \Drupal::service('content_translation.manager');
/** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $last_installed_schema_repository */
$last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository');
$entity_type_manager = \Drupal::entityTypeManager();
$entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
foreach ($content_translation_manager->getSupportedEntityTypes() as $entity_type_id => $entity_type_definition) {
$storage = $entity_type_manager->getStorage($entity_type_id);
if ($storage instanceof SqlEntityStorageInterface) {
$entity_type = $entity_definition_update_manager->getEntityType($entity_type_id);
$storage_definitions = $last_installed_schema_repository->getLastInstalledFieldStorageDefinitions($entity_type_id);
// Since the entity type is managed by Content Translation, we can assume
// that it is translatable, so we use the data and revision data tables.
$tables_to_update = [$entity_type->getDataTable()];
if ($entity_type->isRevisionable()) {
$tables_to_update += [$entity_type->getRevisionDataTable()];
}
foreach ($tables_to_update as $table_name) {
// Fix the values of the 'content_translation_source' field.
if (isset($storage_definitions['content_translation_source'])) {
$database->update($table_name)
->fields(['content_translation_source' => LanguageInterface::LANGCODE_NOT_SPECIFIED])
->isNull('content_translation_source')
->execute();
}
// Fix the values of the 'content_translation_outdated' field.
if (isset($storage_definitions['content_translation_outdated'])) {
$database->update($table_name)
->fields(['content_translation_outdated' => 0])
->isNull('content_translation_outdated')
->execute();
}
// Fix the values of the 'content_translation_status' field.
if (isset($storage_definitions['content_translation_status'])) {
$database->update($table_name)
->fields(['content_translation_status' => 1])
->isNull('content_translation_status')
->execute();
}
}
}
}
}