Message.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace RocketTheme\Toolbox\Session;
  3. /**
  4. * Implements session messages.
  5. *
  6. * @package RocketTheme\Toolbox\Session
  7. * @author RocketTheme
  8. * @license MIT
  9. */
  10. class Message
  11. {
  12. /**
  13. * @var array|string[]
  14. */
  15. protected $messages = [];
  16. /**
  17. * Add message to the queue.
  18. *
  19. * @param string $message
  20. * @param string $scope
  21. * @return $this
  22. */
  23. public function add($message, $scope = 'default')
  24. {
  25. $key = md5($scope.'~'.$message);
  26. $item = ['message' => $message, 'scope' => $scope];
  27. // don't add duplicates
  28. if (!array_key_exists($key, $this->messages)) {
  29. $this->messages[$key] = $item;
  30. }
  31. return $this;
  32. }
  33. /**
  34. * Clear message queue.
  35. *
  36. * @param string $scope
  37. * @return $this
  38. */
  39. public function clear($scope = null)
  40. {
  41. if ($scope === null) {
  42. $this->messages = array();
  43. } else {
  44. foreach ($this->messages as $key => $message) {
  45. if ($message['scope'] === $scope) {
  46. unset($this->messages[$key]);
  47. }
  48. }
  49. }
  50. return $this;
  51. }
  52. /**
  53. * Fetch all messages.
  54. *
  55. * @param string $scope
  56. * @return array
  57. */
  58. public function all($scope = null)
  59. {
  60. if ($scope === null) {
  61. return array_values($this->messages);
  62. }
  63. $messages = array();
  64. foreach ($this->messages as $message) {
  65. if ($message['scope'] === $scope) {
  66. $messages[] = $message;
  67. }
  68. }
  69. return $messages;
  70. }
  71. /**
  72. * Fetch and clear message queue.
  73. *
  74. * @param string $scope
  75. * @return array
  76. */
  77. public function fetch($scope = null)
  78. {
  79. $messages = $this->all($scope);
  80. $this->clear($scope);
  81. return $messages;
  82. }
  83. }