Add fieldDump() to User. Add writing to logging db. #330
This commit is contained in:
parent
3e8a6a642a
commit
eff3dc94ec
3 changed files with 65 additions and 17 deletions
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue