From 1efb7ee31ca69f8922e5995ae71199cd422c4d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Ducoulombier?= Date: Mon, 23 Mar 2020 18:30:28 +0100 Subject: [PATCH] Script to copy user.user_id to extra field ScormStudentId - refs BT#16901 --- main/admin/copy_user_id_to_extra_field.php | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 main/admin/copy_user_id_to_extra_field.php diff --git a/main/admin/copy_user_id_to_extra_field.php b/main/admin/copy_user_id_to_extra_field.php new file mode 100644 index 0000000000..bacaa7815e --- /dev/null +++ b/main/admin/copy_user_id_to_extra_field.php @@ -0,0 +1,75 @@ +getRepository('ChamiloCoreBundle:ExtraField'); +$extraField = $extraFieldRepository->findOneBy( + [ + 'extraFieldType' => ExtraField::USER_FIELD_TYPE, + 'variable' => $extraFieldName, + ] +) or die("Cannot find user extra field '$extraFieldName'\n"); + + +// Read all values in this extra field +$extraFieldValueRepository = Database::getManager()->getRepository('ChamiloCoreBundle:ExtraFieldValues'); +foreach ($extraFieldValueRepository->findBy(['field' => $extraField]) as $extraFieldValue) { + $extraFieldValues[$extraFieldValue->getItemId()] = $extraFieldValue; +} + + +// for each known user +$userRepository = Database::getManager()->getRepository('ChamiloUserBundle:User'); +foreach ($userRepository->findAll() as $user) { + $value = $user->getUserId(); + if (array_key_exists($user->getId(), $extraFieldValues)) { + // user already has a value in the extra field + if ($extraFieldValues[$user->getId()]->getValue() === $value) { + // value is already ok, nothing to do + } else { + // wrong value, fix it + $extraFieldValue->setValue($value); + Database::getManager()->persist($extraFieldValue); + if ($debug) { + echo 'Updated ' . $user->getUsername() . ' extra field value to ' . $value . "\n"; + } + } + } else { + // user does not have a value in the extra field + $extraFieldValue = new ExtraFieldValues(); + $extraFieldValue->setValue($value); + $extraFieldValue->setField($extraField); + $extraFieldValue->setItemId($user->getId()); + Database::getManager()->persist($extraFieldValue); + $extraFieldValues[$user->getId()] = $extraFieldValue; + if ($debug) { + echo 'Created ' . $user->getUsername() . ' extra field with value ' . $value . "\n"; + } + } +} +try { + Database::getManager()->flush(); +} catch (OptimisticLockException $exception) { + die($exception->getMessage()."\n"); +}