diff --git a/public/main/admin/statistics/index.php b/public/main/admin/statistics/index.php index b5d62d9667..be8ddcc04b 100644 --- a/public/main/admin/statistics/index.php +++ b/public/main/admin/statistics/index.php @@ -747,7 +747,7 @@ switch ($report) { $extraConditions = ''; if (!empty($startDate) && !empty($endDate)) { // $extraConditions is already cleaned inside the function getUserListExtraConditions - $extraConditions .= " AND registration_date BETWEEN '$startDate' AND '$endDate' "; + $extraConditions .= " AND created_at BETWEEN '$startDate' AND '$endDate' "; } $totalCount = UserManager::getUserListExtraConditions( @@ -856,7 +856,7 @@ switch ($report) { $item = []; $item[] = $user['firstname']; $item[] = $user['lastname']; - $item[] = api_get_local_time($user['registration_date']); + $item[] = api_get_local_time($user['created_at']); $item[] = $userLanguage; $item[] = $languageTarget; $item[] = $contract ? get_lang('Yes') : get_lang('No'); diff --git a/public/main/admin/user_edit.php b/public/main/admin/user_edit.php index 2177c407aa..05e7553e28 100644 --- a/public/main/admin/user_edit.php +++ b/public/main/admin/user_edit.php @@ -93,7 +93,7 @@ $user_data['send_mail'] = 0; $user_data['old_password'] = $user_data['password']; //Convert the registration date of the user -$user_data['registration_date'] = api_get_local_time($user_data['registration_date']); +$user_data['created_at'] = api_get_local_time($user_data['created_at']); unset($user_data['password']); // Create the form @@ -288,7 +288,7 @@ if (!empty($creatorInfo)) { get_lang('Create by %s on %s'), 'user_information.php?user_id='.$user_data['creator_id'], $creatorInfo['username'], - $user_data['registration_date'] + $user_data['created_at'] ); $form->addElement('label', get_lang('Registration date'), $date); } diff --git a/public/main/admin/user_export.php b/public/main/admin/user_export.php index 583a996be2..e06d3ad98a 100644 --- a/public/main/admin/user_export.php +++ b/public/main/admin/user_export.php @@ -96,7 +96,7 @@ if ($form->validate()) { u.status AS Status, u.official_code AS OfficialCode, u.phone AS Phone, - u.registration_date AS RegistrationDate"; + u.created_at AS CreatedAt"; if (strlen($course_code) > 0) { $sql .= " FROM $user_table u, $course_user_table cu WHERE diff --git a/public/main/admin/user_information.php b/public/main/admin/user_information.php index 519372ac91..63846e459b 100644 --- a/public/main/admin/user_information.php +++ b/public/main/admin/user_information.php @@ -166,12 +166,12 @@ $params = []; $creatorId = $user->getCreatorId(); $creatorInfo = api_get_user_info($creatorId); if (!empty($creatorId) && !empty($creatorInfo)) { - $registrationDate = $user->getRegistrationDate()->format('Y-m-d H:i:s'); + $createdAt = $user->getCreatedAt()->format('Y-m-d H:i:s'); $userInfo['created'] = sprintf( get_lang('Create by %s on %s'), 'user_information.php?user_id='.$creatorId, $creatorInfo['username'], - api_get_utc_datetime($registrationDate) + api_get_utc_datetime($createdAt) ); } diff --git a/public/main/admin/user_list.php b/public/main/admin/user_list.php index f8550bcfe7..67116e15cc 100644 --- a/public/main/admin/user_list.php +++ b/public/main/admin/user_list.php @@ -186,7 +186,7 @@ function prepare_user_sql_query(bool $getCount, bool $showDeletedUsers = false): u.email AS col6, u.status AS col7, u.active AS col8, - u.registration_date AS col9, + u.created_at AS col9, u.last_login as col10, u.id AS col11, u.expiration_date AS exp, diff --git a/public/main/admin/user_list_consent.php b/public/main/admin/user_list_consent.php index 01f7b87f28..096d0cc0b0 100644 --- a/public/main/admin/user_list_consent.php +++ b/public/main/admin/user_list_consent.php @@ -54,7 +54,7 @@ function prepare_user_sql_query($getCount) u.status AS col7, u.active AS col8, u.id AS col9, - u.registration_date AS col10, + u.created_at AS col10, u.expiration_date AS exp, u.password, v.field_id, diff --git a/public/main/inc/ajax/statistics.ajax.php b/public/main/inc/ajax/statistics.ajax.php index 7504b8dbdf..141c629332 100644 --- a/public/main/inc/ajax/statistics.ajax.php +++ b/public/main/inc/ajax/statistics.ajax.php @@ -294,7 +294,7 @@ switch ($action) { $extraConditions = ''; if (!empty($startDate) && !empty($endDate)) { - $extraConditions .= " AND registration_date BETWEEN '$startDate' AND '$endDate' "; + $extraConditions .= " AND created_at BETWEEN '$startDate' AND '$endDate' "; } switch ($filter) { diff --git a/public/main/inc/lib/api.lib.php b/public/main/inc/lib/api.lib.php index 971bfd81a8..d74b99bd0e 100644 --- a/public/main/inc/lib/api.lib.php +++ b/public/main/inc/lib/api.lib.php @@ -1321,7 +1321,7 @@ function _api_format_user($user, $add_password = false, $loadAvatars = true) 'language', 'locale', 'creator_id', - 'registration_date', + 'created_at', 'hr_dept_id', 'expiration_date', 'last_login', @@ -1650,7 +1650,7 @@ function api_get_user_info_from_entity( $result['auth_source'] = $user->getAuthSource(); $result['language'] = $user->getLocale(); $result['creator_id'] = $user->getCreatorId(); - $result['registration_date'] = $user->getRegistrationDate()->format('Y-m-d H:i:s'); + $result['created_at'] = $user->getCreatedAt()->format('Y-m-d H:i:s'); $result['hr_dept_id'] = $user->getHrDeptId(); $result['expiration_date'] = ''; if ($user->getExpirationDate()) { @@ -1989,7 +1989,7 @@ function api_get_anonymous_id() $result = Database::query($sql); if (empty(Database::num_rows($result))) { $login = uniqid('anon_'); - $anonList = UserManager::get_user_list(['status' => ANONYMOUS], ['registration_date ASC']); + $anonList = UserManager::get_user_list(['status' => ANONYMOUS], ['created_at ASC']); if (count($anonList) >= $max) { foreach ($anonList as $userToDelete) { UserManager::delete_user($userToDelete['user_id']); diff --git a/public/main/inc/lib/statistics.lib.php b/public/main/inc/lib/statistics.lib.php index d7c8589a5c..7ed835f305 100644 --- a/public/main/inc/lib/statistics.lib.php +++ b/public/main/inc/lib/statistics.lib.php @@ -1585,9 +1585,9 @@ class Statistics */ public static function getNewUserRegistrations(string $startDate, string $endDate): array { - $sql = "SELECT DATE_FORMAT(registration_date, '%Y-%m-%d') as reg_date, COUNT(*) as user_count + $sql = "SELECT DATE_FORMAT(created_at, '%Y-%m-%d') as reg_date, COUNT(*) as user_count FROM user - WHERE registration_date BETWEEN '$startDate' AND '$endDate' + WHERE created_at BETWEEN '$startDate' AND '$endDate' GROUP BY reg_date"; $result = Database::query($sql); @@ -1608,7 +1608,7 @@ class Statistics $sql = "SELECT u.creator_id, COUNT(u.id) as user_count, c.firstname, c.lastname FROM user u LEFT JOIN user c ON u.creator_id = c.id - WHERE u.registration_date BETWEEN '$startDate' AND '$endDate' + WHERE u.created_at BETWEEN '$startDate' AND '$endDate' AND u.creator_id IS NOT NULL GROUP BY u.creator_id"; diff --git a/public/main/inc/lib/usermanager.lib.php b/public/main/inc/lib/usermanager.lib.php index 0b126ae8ec..9f957fddb4 100644 --- a/public/main/inc/lib/usermanager.lib.php +++ b/public/main/inc/lib/usermanager.lib.php @@ -279,7 +279,6 @@ class UserManager ->setPhone($phone) ->setAddress($address) ->setLocale($language) - ->setRegistrationDate($now) ->setHrDeptId($hrDeptId) ->setActive($active) ->setTimezone(api_get_timezone()) @@ -3410,11 +3409,11 @@ class UserManager if (!empty($dateFrom)) { $dateFrom = api_get_utc_datetime("$dateFrom 00:00:00"); - $sql .= " AND u.registration_date >= '$dateFrom' "; + $sql .= " AND u.created_at >= '$dateFrom' "; } if (!empty($dateUntil)) { $dateUntil = api_get_utc_datetime("$dateUntil 23:59:59"); - $sql .= " AND u.registration_date <= '$dateUntil' "; + $sql .= " AND u.created_at <= '$dateUntil' "; } $res = Database::query($sql); diff --git a/public/main/inc/lib/webservices/Rest.php b/public/main/inc/lib/webservices/Rest.php index 90f2047c56..bc9bc13a90 100644 --- a/public/main/inc/lib/webservices/Rest.php +++ b/public/main/inc/lib/webservices/Rest.php @@ -1876,8 +1876,8 @@ class Rest extends WebService } $user->setLocale($value); break; - case 'registration_date': - $user->setRegistrationDate($value); + case 'created_at': + $user->setCreatedAt($value); break; case 'expiration_date': $user->setExpirationDate( diff --git a/public/main/inc/lib/zombie/zombie_manager.class.php b/public/main/inc/lib/zombie/zombie_manager.class.php index a9022d1020..8604938de6 100644 --- a/public/main/inc/lib/zombie/zombie_manager.class.php +++ b/public/main/inc/lib/zombie/zombie_manager.class.php @@ -41,7 +41,7 @@ class ZombieManager $column = 'firstname'; } - $validColumns = ['id', 'official_code', 'firstname', 'lastname', 'username', 'auth_source', 'email', 'status', 'registration_date', 'active', 'login_date']; + $validColumns = ['id', 'official_code', 'firstname', 'lastname', 'username', 'auth_source', 'email', 'status', 'created_at', 'active', 'login_date']; if (!in_array($column, $validColumns)) { $column = 'firstname'; } @@ -60,7 +60,7 @@ class ZombieManager user.auth_source, user.email, user.status, - user.registration_date, + user.created_at, user.active, access.login_date'; diff --git a/public/main/inc/lib/zombie/zombie_report.class.php b/public/main/inc/lib/zombie/zombie_report.class.php index 87abcba561..063c26fbad 100644 --- a/public/main/inc/lib/zombie/zombie_report.class.php +++ b/public/main/inc/lib/zombie/zombie_report.class.php @@ -208,7 +208,7 @@ class ZombieReport implements Countable $row[] = $item['email']; $row[] = $item['status']; $row[] = $item['auth_source']; - $row[] = api_format_date($item['registration_date'], DATE_FORMAT_SHORT); + $row[] = api_format_date($item['created_at'], DATE_FORMAT_SHORT); $row[] = api_format_date($item['login_date'], DATE_FORMAT_SHORT); $row[] = $item['active']; $result[] = $row; diff --git a/public/main/tracking/lp_report.php b/public/main/tracking/lp_report.php index 9d702c8ff1..de2e8cc70e 100644 --- a/public/main/tracking/lp_report.php +++ b/public/main/tracking/lp_report.php @@ -53,7 +53,7 @@ function prepare_user_sql_query($getCount) u.email AS col6, u.status AS col7, u.active AS col8, - u.registration_date AS col9, + u.created_at AS col9, u.last_login as col10, u.id AS col11, u.expiration_date AS exp, diff --git a/public/main/user/user_export.php b/public/main/user/user_export.php index 5757a5671d..f108fed9a7 100644 --- a/public/main/user/user_export.php +++ b/public/main/user/user_export.php @@ -70,7 +70,7 @@ $sql = "SELECT u.status AS Status, u.official_code AS OfficialCode, u.phone AS Phone, - u.registration_date AS RegistrationDate"; + u.created_at AS RegistrationDate"; if (strlen($course_code) > 0) { $sql .= " FROM $userTable u INNER JOIN $course_user_table cu diff --git a/public/plugin/migrationmoodle/src/Loader/UsersLoader.php b/public/plugin/migrationmoodle/src/Loader/UsersLoader.php index 9bcf108e60..9b0e7acf1e 100644 --- a/public/plugin/migrationmoodle/src/Loader/UsersLoader.php +++ b/public/plugin/migrationmoodle/src/Loader/UsersLoader.php @@ -76,11 +76,11 @@ class UsersLoader implements LoaderInterface throw new \Exception('User was not created'); } - if ($incomingData['registration_date']) { - $incomingData['registration_date'] = $incomingData['registration_date']->format('Y-m-d H:i:s'); + if ($incomingData['created_at']) { + $incomingData['created_at'] = $incomingData['created_at']->format('Y-m-d H:i:s'); \Database::query( - "UPDATE $tblUser SET registration_date = '{$incomingData['registration_date']}' WHERE id = $userId" + "UPDATE $tblUser SET created_at = '{$incomingData['created_at']}' WHERE id = $userId" ); } diff --git a/public/plugin/migrationmoodle/src/Task/UsersTask.php b/public/plugin/migrationmoodle/src/Task/UsersTask.php index d819c8c90a..a6e861e27c 100644 --- a/public/plugin/migrationmoodle/src/Task/UsersTask.php +++ b/public/plugin/migrationmoodle/src/Task/UsersTask.php @@ -59,7 +59,7 @@ class UsersTask extends BaseTask 'class' => AuthLookup::class, 'properties' => ['auth'], ], - 'registration_date' => [ + 'created_at' => [ 'class' => DateTimeObject::class, 'properties' => ['timecreated'], ], diff --git a/src/CoreBundle/Entity/User.php b/src/CoreBundle/Entity/User.php index 60d899494a..3f83ebffb6 100644 --- a/src/CoreBundle/Entity/User.php +++ b/src/CoreBundle/Entity/User.php @@ -615,9 +615,6 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso #[ORM\Column(name: 'productions', type: 'string', length: 250, unique: false, nullable: true)] protected ?string $productions = null; - #[ORM\Column(name: 'registration_date', type: 'datetime')] - protected DateTime $registrationDate; - #[ORM\Column(name: 'expiration_date', type: 'datetime', unique: false, nullable: true)] protected ?DateTime $expirationDate = null; @@ -759,7 +756,6 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso $this->logins = new ArrayCollection(); $this->createdAt = new DateTime(); $this->updatedAt = new DateTime(); - $this->registrationDate = new DateTime(); $this->roles = []; $this->credentialsExpired = false; $this->credentialsExpireAt = new DateTime(); @@ -1045,18 +1041,6 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso return $this; } - public function getRegistrationDate(): DateTime - { - return $this->registrationDate; - } - - public function setRegistrationDate(DateTime $registrationDate): self - { - $this->registrationDate = $registrationDate; - - return $this; - } - public function getExpirationDate(): ?DateTime { return $this->expirationDate; @@ -1122,11 +1106,6 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso return $this; } - public function getMemberSince(): DateTime - { - return $this->registrationDate; - } - public function isOnline(): bool { return false; diff --git a/src/CoreBundle/EventSubscriber/AnonymousUserSubscriber.php b/src/CoreBundle/EventSubscriber/AnonymousUserSubscriber.php index 9b0c049159..9452138dcd 100644 --- a/src/CoreBundle/EventSubscriber/AnonymousUserSubscriber.php +++ b/src/CoreBundle/EventSubscriber/AnonymousUserSubscriber.php @@ -73,7 +73,7 @@ class AnonymousUserSubscriber implements EventSubscriberInterface 'auth_source' => $user->getAuthSource(), 'theme' => $user->getTheme(), 'language' => $user->getLocale(), - 'registration_date' => $user->getRegistrationDate()->format('Y-m-d H:i:s'), + 'created_at' => $user->getCreatedAt()->format('Y-m-d H:i:s'), 'expiration_date' => $user->getExpirationDate() ? $user->getExpirationDate()->format('Y-m-d H:i:s') : null, 'last_login' => $user->getLastLogin() ? $user->getLastLogin()->format('Y-m-d H:i:s') : null, 'is_anonymous' => true, @@ -98,7 +98,7 @@ class AnonymousUserSubscriber implements EventSubscriberInterface $anonymousAutoProvisioning = 'true' === $this->settingsManager->getSetting('security.anonymous_autoprovisioning'); if (!$anonymousAutoProvisioning) { - $anonymousUser = $userRepository->findOneBy(['status' => User::ANONYMOUS], ['registrationDate' => 'ASC']); + $anonymousUser = $userRepository->findOneBy(['status' => User::ANONYMOUS], ['createdAt' => 'ASC']); if ($anonymousUser) { return $anonymousUser->getId(); } @@ -110,7 +110,7 @@ class AnonymousUserSubscriber implements EventSubscriberInterface if (0 === $maxAnonymousUsers) { $maxAnonymousUsers = self::MAX_ANONYMOUS_USERS; } - $anonymousUsers = $userRepository->findBy(['status' => User::ANONYMOUS], ['registrationDate' => 'ASC']); + $anonymousUsers = $userRepository->findBy(['status' => User::ANONYMOUS], ['createdAt' => 'ASC']); // Check in TrackELogin if there is an anonymous user with the same IP foreach ($anonymousUsers as $user) { diff --git a/src/CoreBundle/Migrations/Schema/V200/Version20250129120000.php b/src/CoreBundle/Migrations/Schema/V200/Version20250129120000.php new file mode 100644 index 0000000000..dc21580d46 --- /dev/null +++ b/src/CoreBundle/Migrations/Schema/V200/Version20250129120000.php @@ -0,0 +1,32 @@ +addSql('UPDATE user SET created_at = registration_date WHERE created_at IS NULL'); + + $this->addSql('ALTER TABLE user DROP COLUMN registration_date'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE user ADD registration_date DATETIME DEFAULT NULL'); + + $this->addSql('UPDATE user SET registration_date = created_at WHERE registration_date IS NULL'); + } +} diff --git a/tests/CoreBundle/Repository/Node/UserRepositoryTest.php b/tests/CoreBundle/Repository/Node/UserRepositoryTest.php index bcc26ec6df..535c6c4b73 100644 --- a/tests/CoreBundle/Repository/Node/UserRepositoryTest.php +++ b/tests/CoreBundle/Repository/Node/UserRepositoryTest.php @@ -216,7 +216,6 @@ class UserRepositoryTest extends AbstractApiTest ->setFirstname('Joe') ->setUsername('admin2') ->setSalt('') - ->setRegistrationDate(new DateTime()) ->setExpirationDate(new DateTime()) ->setOpenid('') ->setSlug('admin2')