Flash.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace RR;
  3. class Flash{
  4. private static $_instance;
  5. // Message types and shortcuts
  6. const INFO = 'i';
  7. const SUCCESS = 's';
  8. const WARNING = 'w';
  9. const ERROR = 'e';
  10. const SESSION_NAME = 'flashes';
  11. const defaultType = self::INFO;
  12. protected $msgTypes = [
  13. self::ERROR => 'error',
  14. self::WARNING => 'warning',
  15. self::SUCCESS => 'success',
  16. self::INFO => 'info',
  17. ];
  18. public $old_messages = Array();
  19. public $new_messages = Array();
  20. public $_flashes = Array();
  21. //SINGLETON==============================================
  22. private function __construct(){
  23. if(session_id() == '' || !isset($_SESSION)) {
  24. session_start();
  25. }
  26. if( isset($_SESSION['flashes']) ){
  27. $this->old_messages = $_SESSION['flashes'];
  28. }
  29. unset( $_SESSION[self::SESSION_NAME] );
  30. }
  31. private static function newObj(){
  32. if (!isset( self::$_instance )) {
  33. self::$_instance = new Flash();
  34. }
  35. return self::$_instance;
  36. }
  37. public static function getInstance(){
  38. if (!isset(self::$_instance)) {
  39. return self::newObj();
  40. }
  41. return self::$_instance;
  42. }
  43. //=======================================================
  44. public function merge(){
  45. $this->_flashes = array_merge_recursive($this->new_messages, $this->old_messages);
  46. }
  47. public function load_to_session(){
  48. $_SESSION[self::SESSION_NAME] = $this->new_messages;
  49. }
  50. public static function add_message($type = self::defaultType, $message){
  51. $instance = self::getInstance();
  52. $instance->new_messages[$type] = $message;
  53. $instance->load_to_session();
  54. }
  55. public static function add_info($message){
  56. $instance = self::getInstance();
  57. $instance->new_messages[self::INFO] = $message;
  58. $instance->load_to_session();
  59. }
  60. public static function add_error($message){
  61. $instance = self::getInstance();
  62. $instance->new_messages[self::ERROR] = $message;
  63. $instance->load_to_session();
  64. }
  65. public static function get_errors(){
  66. if(!self::has_errors()){
  67. return Array();
  68. }
  69. return self::getInstance()->_flashes[self::ERROR];
  70. }
  71. public static function get_infos(){
  72. if(!self::has_info()){
  73. return Array();
  74. }
  75. return self::getInstance()->_flashes[self::INFO];
  76. }
  77. public static function has_errors(){
  78. $instance = self::getInstance();
  79. $instance->merge();
  80. if( array_key_exists(self::ERROR, $instance->_flashes ) ){
  81. return true;
  82. }else{
  83. return false;
  84. }
  85. }
  86. public static function has_info(){
  87. $instance = self::getInstance();
  88. $instance->merge();
  89. if( array_key_exists(self::INFO, $instance->_flashes ) ){
  90. return true;
  91. }else{
  92. return false;
  93. }
  94. }
  95. }