Logger.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php if ( ! defined( 'ABSPATH' ) ) exit;
  2. /**
  3. * Class NF_Abstracts_logger
  4. *
  5. * Handles custom logging for Ninja Forms and Ninja Forms Extensions.
  6. *
  7. * PSR-3 and WordPress Compliant where applicable.
  8. */
  9. final class NF_Database_Logger extends NF_Abstracts_Logger
  10. {
  11. protected $_current = array();
  12. /**
  13. * Logs with an arbitrary level.
  14. *
  15. * @param mixed $level
  16. * @param string $message
  17. * @param array $context
  18. * @return null
  19. */
  20. public function log( $level, $message, array $context = array() )
  21. {
  22. $message = $this->interpolate( $message, $context );
  23. // Create Log Object
  24. $log = Ninja_Forms()->form()->object()->get();
  25. $log->update_setting( 'type', 'log' )
  26. ->update_setting( 'level', $level )
  27. ->update_setting( 'message', $message );
  28. foreach ($context as $key => $value) {
  29. $log->update_setting($key, maybe_serialize($value));
  30. }
  31. // Add to Database
  32. $log->save();
  33. // Add to Current Property Array
  34. $this->_current[ $level ][] = $log;
  35. }
  36. /**
  37. * Get current logs for the request lifecycle
  38. *
  39. * @param string $level
  40. * @return array
  41. */
  42. public function get_current( $level = '' )
  43. {
  44. return ( $level ) ? $this->_current[ $level ] : $this->_current;
  45. }
  46. /**
  47. * Interpolates context values into the message placeholders.
  48. *
  49. * @param $message
  50. * @param array $context
  51. * @return string
  52. */
  53. protected function interpolate( $message, array $context = array() )
  54. {
  55. // build a replacement array with braces around the context keys
  56. $replace = array();
  57. foreach ($context as $key => $val) {
  58. if( is_array( $val ) ) continue;
  59. $replace['{' . $key . '}'] = $val;
  60. }
  61. // interpolate replacement values into the message and return
  62. return strtr($message, $replace);
  63. }
  64. }