Files
ldap_groups_sync/modules/ldap_departments_sync/ldap_departments_sync.install
Quintino A. G. Souza 7e338677a3 Move submódulos para modules/ seguindo convenção Drupal
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>
2026-03-02 09:22:22 -03:00

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.'));
}