o365-2.0.3/o365.install
o365.install
<?php
/**
* @file
* Contains o365.install.
*/
use Drupal\Core\Site\Settings;
/**
* Implements hook_install().
*/
function o365_install() {
module_set_weight('o365', 100);
}
/**
* Implements hook_requirements().
*
* Display information about the Microsoft 365 values in the settings.php.
*/
function o365_requirements($phase) {
$requirements = [];
if ($phase === 'runtime') {
$settings = Settings::get('o365');
$value = t('Everything is configured properly.');
$severity = REQUIREMENT_OK;
/** @var \Drupal\o365\O365ConnectorInterface[] $o365_connectors */
$o365_connectors = \Drupal::entityTypeManager()
->getStorage('o365_connector')
->loadMultiple();
$build = [];
foreach ($o365_connectors as $o365_connector) {
if (empty($settings)) {
$value = t('There are no Microsoft 365 API settings provided in the settings.php file. Please consult the documentation.');
$severity = REQUIREMENT_ERROR;
break;
}
$connector_id = $o365_connector->id();
$connector_label = $o365_connector->label();
$connector_args = [
'@connector_id' => $connector_id,
'%o365_connector' => $connector_label,
];
$issues = [];
if (empty($settings[$connector_id])) {
$issues[] = t("Please provide a <code>\$settings['o365']['@connector_id']</code> entry in your settings.php file.", $connector_args);
$severity = REQUIREMENT_ERROR;
}
else {
if (!isset($settings[$connector_id]['client_id'], $settings[$connector_id]['client_secret'], $settings[$connector_id]['tenant_id'])) {
$severity = REQUIREMENT_ERROR;
if (!isset($settings[$connector_id]['client_id'])) {
$issues[] = t('The client ID has not been provided.', $connector_args);
}
if (!isset($settings[$connector_id]['client_secret'])) {
$issues[] = t('The client secret has not been provided.', $connector_args);
}
if (!isset($settings[$connector_id]['tenant_id'])) {
$issues[] = t('The tenant ID has not been provided.', $connector_args);
}
}
}
if ($issues) {
$build[] = [
'#theme' => 'item_list',
'#title' => $connector_label,
'#items' => $issues,
];
}
}
if ($build) {
/** @var \Drupal\Core\Render\RendererInterface $renderer */
$renderer = \Drupal::service('renderer');
// Doing a manual version_compare() rather than DeprecationHelper because
// D9 is still being supported.
if (version_compare(\Drupal::VERSION, '10.3', '>=')) {
$output = $renderer->renderInIsolation($build);
}
else {
// @phpstan-ignore method.deprecated
$output = $renderer->renderPlain($build);
}
}
else {
$output = $value;
}
$requirements['o365'] = [
'title' => t('Microsoft 365 Connector'),
'value' => $output,
'severity' => $severity,
];
}
return $requirements;
}
/**
* Removed.
*/
function o365_update_8001() {
}
/**
* Set module weight.
*/
function o365_update_8002() {
module_set_weight('o365', 100);
}
/**
* Removed.
*/
function o365_update_8003() {
}
/**
* Removed.
*/
function o365_update_8004() {
}
/**
* Remove field base definition.
*/
function o365_update_9001() {
$update_manager = \Drupal::entityDefinitionUpdateManager();
$definition = $update_manager->getFieldStorageDefinition('o365_id', 'user');
if (!empty($definition)) {
$update_manager->uninstallFieldStorageDefinition($definition);
}
}
/**
* Install the "Microsoft 365 connector" entity type.
*/
function o365_update_10001() {
$update_manager = \Drupal::entityDefinitionUpdateManager();
$entity_type = \Drupal::entityTypeManager()->getDefinition('o365_connector');
$update_manager->installEntityType($entity_type);
}
/**
* Generate default "Microsoft 365 connector" entity.
*/
function o365_update_10002() {
$default_settings = \Drupal::config('o365.api_settings');
$redirect_login = $default_settings->get('redirect_login') ?? '';
$auth_scopes = $default_settings->get('auth_scopes') ?? '';
$entity_storage = \Drupal::entityTypeManager()->getStorage('o365_connector');
if (($redirect_login || $auth_scopes) && !$entity_storage->load('default')) {
$entity_storage
->create([
'id' => 'default',
'label' => 'Microsoft 365',
'status' => TRUE,
'redirect_login' => $redirect_login,
'auth_scopes' => $auth_scopes,
])
->save();
return t('Created a default Microsoft o365 connector.');
}
}
/**
* Remove the redundant "redirect_login" and "auth_scopes" configs.
*/
function o365_update_10003() {
$config = \Drupal::configFactory()->getEditable('o365.api_settings');
$config
->clear('redirect_login')
->clear('auth_scopes')
->save(TRUE);
}
