mirror of
https://gitlab.unicamp.br/infimecc_drupal11_modules/ldap_groups_sync.git
synced 2026-03-09 18:07:41 -03:00
ldap_departments_sync/ e ldap_research_groups_sync/ movidos para modules/, padrão adotado por módulos contrib como Drupal Commerce. Nenhum arquivo PHP ou YAML alterado — o Drupal descobre módulos recursivamente pelo .info.yml independente do caminho. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
107 lines
3.5 KiB
Plaintext
107 lines
3.5 KiB
Plaintext
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Arquivo de instalação para ldap_departments_sync.
|
|
*/
|
|
|
|
use Drupal\Core\Entity\Entity\EntityFormDisplay;
|
|
use Drupal\Core\Entity\Entity\EntityViewDisplay;
|
|
use Drupal\field\Entity\FieldConfig;
|
|
use Drupal\field\Entity\FieldStorageConfig;
|
|
|
|
/**
|
|
* Implements hook_install().
|
|
*/
|
|
function ldap_departments_sync_install() {
|
|
\Drupal::messenger()->addWarning(t('Please ensure your group type has the required fields: field_dept_code, field_dept_acronym, field_dept_type, field_dept_phone, field_dept_room, field_dept_mail, and field_parent_group (for hierarchy).'));
|
|
}
|
|
|
|
/**
|
|
* Renames field_user_phone_number to field_user_work_phone.
|
|
*/
|
|
function ldap_departments_sync_update_10001() {
|
|
// 1. Create new field storage.
|
|
if (!FieldStorageConfig::loadByName('user', 'field_user_work_phone')) {
|
|
FieldStorageConfig::create([
|
|
'field_name' => 'field_user_work_phone',
|
|
'entity_type' => 'user',
|
|
'type' => 'telephone',
|
|
'cardinality' => 1,
|
|
'translatable' => TRUE,
|
|
])->save();
|
|
}
|
|
|
|
// 2. Create new field instance.
|
|
if (!FieldConfig::loadByName('user', 'user', 'field_user_work_phone')) {
|
|
FieldConfig::create([
|
|
'field_name' => 'field_user_work_phone',
|
|
'entity_type' => 'user',
|
|
'bundle' => 'user',
|
|
'label' => 'Work Phone',
|
|
'description' => 'Work phone number, populated from LDAP.',
|
|
'required' => FALSE,
|
|
'translatable' => FALSE,
|
|
])->save();
|
|
}
|
|
|
|
// 3. Copy data directly via SQL — efficient and side-effect-free.
|
|
$database = \Drupal::database();
|
|
$schema = $database->schema();
|
|
foreach (['user__', 'user_revision__'] as $prefix) {
|
|
$old_table = $prefix . 'field_user_phone_number';
|
|
$new_table = $prefix . 'field_user_work_phone';
|
|
if ($schema->tableExists($old_table) && $schema->tableExists($new_table)) {
|
|
$database->query("
|
|
INSERT INTO {{$new_table}}
|
|
(bundle, deleted, entity_id, revision_id, langcode, delta, field_user_work_phone_value)
|
|
SELECT bundle, deleted, entity_id, revision_id, langcode, delta, field_user_phone_number_value
|
|
FROM {{$old_table}}
|
|
WHERE deleted = 0
|
|
");
|
|
}
|
|
}
|
|
|
|
// 4. Update form display.
|
|
$form_display = EntityFormDisplay::load('user.user.default');
|
|
if ($form_display) {
|
|
$component = $form_display->getComponent('field_user_phone_number');
|
|
if ($component) {
|
|
$form_display->removeComponent('field_user_phone_number');
|
|
$form_display->setComponent('field_user_work_phone', $component);
|
|
$form_display->save();
|
|
}
|
|
}
|
|
|
|
// 5. Update view display.
|
|
$view_display = EntityViewDisplay::load('user.user.default');
|
|
if ($view_display) {
|
|
$component = $view_display->getComponent('field_user_phone_number');
|
|
if ($component) {
|
|
$view_display->removeComponent('field_user_phone_number');
|
|
$view_display->setComponent('field_user_work_phone', $component);
|
|
$view_display->save();
|
|
}
|
|
}
|
|
|
|
// 6. Delete old field instance then storage.
|
|
if ($old_config = FieldConfig::loadByName('user', 'user', 'field_user_phone_number')) {
|
|
$old_config->delete();
|
|
}
|
|
if ($old_storage = FieldStorageConfig::loadByName('user', 'field_user_phone_number')) {
|
|
$old_storage->delete();
|
|
}
|
|
|
|
return t('Renamed field_user_phone_number to field_user_work_phone.');
|
|
}
|
|
|
|
/**
|
|
* Implements hook_uninstall().
|
|
*/
|
|
function ldap_departments_sync_uninstall() {
|
|
// Remove configurações
|
|
\Drupal::configFactory()->getEditable('ldap_departments_sync.settings')->delete();
|
|
|
|
\Drupal::messenger()->addStatus(t('Módulo LDAP Departments Sync desinstalado.'));
|
|
}
|