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