From eff3dc94ec98c17d74564b5e68ba274259e1d8bf Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 6 Mar 2020 06:20:22 +0000 Subject: [PATCH] Add fieldDump() to User. Add writing to logging db. #330 --- config/services.yaml | 3 ++ src/Entity/User.php | 16 +++++++ src/EventListener/EntityListener.php | 63 ++++++++++++++++++++-------- 3 files changed, 65 insertions(+), 17 deletions(-) diff --git a/config/services.yaml b/config/services.yaml index d5b9ee16..59f4fb0a 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -275,3 +275,6 @@ services: - name: 'doctrine.event_listener' event: 'onFlush' entity: 'App\Entity\User' + - name: 'doctrine.orm.entity_listener' + event: 'postPersist' + entity: 'App\Entity\User' diff --git a/src/Entity/User.php b/src/Entity/User.php index 491a1af6..12414190 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -312,5 +312,21 @@ class User extends BaseUser implements Serializable public function fieldDump() { + // get all fields and their values into an array + $field_array = [ + 'id' => $this->getID(), + 'username' => $this->getUsername(), + 'password' => $this->getPassword(), + 'first_name' => $this->getFirstName(), + 'last_name' => $this->getLastName(), + 'email' => $this->getEmail(), + 'contact_number' => $this->getContactNumber(), + 'roles' => $this->getRoles(), + 'hubs' => $this->getHubs(), + ]; + + $fields = json_encode($field_array); + + return $fields; } } diff --git a/src/EventListener/EntityListener.php b/src/EventListener/EntityListener.php index 6d9190d1..91adff0c 100644 --- a/src/EventListener/EntityListener.php +++ b/src/EventListener/EntityListener.php @@ -24,16 +24,23 @@ abstract class EntityListener public function postPersist($object, LifecycleEventArgs $args) { - $event_time = new DateTime(); + //$event_time = new DateTime(); - // get user for logging + // get user id for logging $user = $this->token_storage->getToken()->getUser(); - $username = $user->getUsername(); + //$username = $user->getUsername(); + $user_id = $user->getID(); + // get entity name $obj_class = preg_replace('/.*\\\\/', '', get_class($object)); - $log_message = $obj_class . ' with id ' . $object->getID() . ' created.'; + $log_message = $obj_class . ' with id ' . $object->getID() . ' created by ' . $user_id; - error_log($log_message); + // get fields of object + $fields = $object->fieldDump(); + + error_log($log_message . ' with ' . $fields); + + $this->writeToLogDB($obj_class, $object->getID(), 'create', $fields, $user_id); } public function onFlush(OnFlushEventArgs $args) @@ -41,11 +48,11 @@ abstract class EntityListener $em = $args->getEntityManager(); // get date time of event for logging - $event_time = new DateTime(); + //$event_time = new DateTime(); // get user for logging $user = $this->token_storage->getToken()->getUser(); - $username = $user->getUsername(); + $user_id = $user->getID(); $field_changes = []; @@ -56,18 +63,15 @@ abstract class EntityListener $updated_collections = $unit_of_work->getScheduledCollectionUpdates(); $deleted_collections = $unit_of_work->getScheduledCollectionDeletions(); - // get objects for creation - foreach ($created_entities as $created_entity) - { - $obj_class = preg_replace('/.*\\\\/', '', get_class($created_entity)); - $log_message = $obj_class . ' with id ' . $created_entity->getUsername() . ' created.'; - - error_log($log_message); - } - // get updated fields. This doesn't include lists of other entities. foreach ($updated_entities as $updated_entity) { + // get entity name + $obj_class = preg_replace('/.*\\\\/', '', get_class($updated_entity)); + $log_message = $obj_class . ' with id ' . $updated_entity->getID() . ' updated by ' . $user_id; + + error_log($log_message); + $changeset = $unit_of_work->getEntityChangeSet($updated_entity); $entity_fields = array_keys($changeset); @@ -83,13 +87,25 @@ abstract class EntityListener 'new_value' => $values[1], ]; } + + $this->writeToLogDB($obj_class, $updated_entity->getID(), 'update', $field_changes, $user_id); } // get deleted objects foreach ($deleted_entities as $deleted_entity) { + // get entity name + $obj_class = preg_replace('/.*\\\\/', '', get_class($deleted_entity)); + $log_message = $obj_class . ' with id ' . $deleted_entity->getID() . ' deleted by ' . $user_id; + + error_log($log_message); + $deleted_id = $deleted_entity->getID(); - $log_message = 'Object with id ' . $deleted_id . ' deleted.'; + + // get fields of deleted entity + $fields = $deleted_entity->fieldDump(); + + $this->writeToLogDB($obj_class, $deleted_id, 'delete', $fields, $user_id); } //$this->log_db->writePoints([new Point( @@ -137,4 +153,17 @@ abstract class EntityListener } */ } + + protected function writeToLogDB($entity_type, $entity_id, $action, $content, $user_id) + { + $new_point = new Point( + 'entity_log', // measurement + null, // measurement value + ['entity_type' => $entity_type, 'entity_id' => $entity_id], // measurement tags + ['action' => $action, 'content' => $content, 'user' => $user_id], // measurement fields + exec('date +%s%N') // timestamp in nanoseconds on Linux only + ); + + $this->log_db->writePoints([$new_point]); + } }