/core/Statuses.class.php

https://github.com/stvvt/ef · PHP · 151 lines · 54 code · 37 blank · 60 comment · 5 complexity · d98874b612b0887ab8988d2293ba47c3 MD5 · raw file

  1. <?php
  2. /**
  3. * Клас 'core_Statuses' - Статусни съобщения
  4. *
  5. * @category ef
  6. * @package core
  7. * @author Yusein Yuseinov <yyuseinov@gmail.com>
  8. * @copyright 2006 - 2012 Experta OOD
  9. * @license GPL 3
  10. * @since v 0.1
  11. */
  12. class core_Statuses extends core_Manager
  13. {
  14. /**
  15. * Заглавие
  16. */
  17. var $title = "Статусни съобщения";
  18. /**
  19. * Добавя съобщение на избрания потребител
  20. *
  21. * @param string $message - Съобщение, което ще добавим
  22. * @param enum $type - Типа на съобщението - success, notice, warning, error
  23. * @param integer $userId - Потребителя, към когото ще се добавя. Ако не подаден потребител, тогава взема текущия потребител.
  24. * @param integer $lifeTime - След колко време да се изтрие
  25. *
  26. * @return integer $id - При успешен запис връща id' то на записа
  27. */
  28. static function add($text, $type='notice')
  29. {
  30. //Очакваме съобщението да не е празен стринг
  31. expect(str::trim($text), 'Няма въведено съобщение.');
  32. //Всички статус съобщения
  33. $statusArr = mode::get('statusArr');
  34. //Създаваме обект
  35. $textObj = new stdClass();
  36. //Записваме текстовата част, типа и времето
  37. $textObj->statusText = $text;
  38. $textObj->statusType = $type;
  39. $textObj->time = time();
  40. //Ако има предишни статуси
  41. if ($statusArr) {
  42. //Добавяме в края на масива
  43. array_push($statusArr, $textObj);
  44. //Записваме новия масив
  45. mode::setPermanent('statusArr', $statusArr);
  46. } else {
  47. //Записваме обекта
  48. mode::setPermanent('statusArr', array($textObj));
  49. }
  50. }
  51. /**
  52. * Връща всички статуси на текущия потребител, на които не им е изтекъл lifeTime' а
  53. *
  54. * @return array $resArr - Масив със съобщението и типа на статуса
  55. */
  56. static function getStatuses()
  57. {
  58. $resArr = array();
  59. //Времето на последното показване на нотификация
  60. $lastNotificationTime = Mode::get('lastNotificationTime');
  61. //Масив с всички статуси
  62. $statusArr = mode::get('statusArr');
  63. $i=0;
  64. if ($statusArr) {
  65. //Докатове има стойност в масива - вземаме първия му елемент
  66. while ($res=array_shift($statusArr)) {
  67. // Ако все още не е видян
  68. if ($res->time > $lastNotificationTime) {
  69. //Текстовата част
  70. $resArr[$i]['statusText'] = $res->statusText;
  71. //Типа на статуса
  72. $resArr[$i]['statusType'] = $res->statusType;
  73. //Увеличаваме ключа на масива с единица
  74. $i++;
  75. }
  76. }
  77. //Записваме останалите стойности в масива
  78. mode::setPermanent('statusArr', $resArr);
  79. }
  80. return $resArr;
  81. }
  82. /**
  83. * Извлича статусите за текущия потребител и ги добавя в div таг
  84. *
  85. * @return string $res - Всички активни статуси за текущия потребител, групирани в div таг
  86. */
  87. static function show_()
  88. {
  89. //Всички активни статуси за текущия потребител
  90. $notifArr = core_Statuses::getStatuses();
  91. //Обикаляме всички статуси
  92. foreach ($notifArr as $value) {
  93. //Записваме всеки статус в отделен div и класа се взема от типа на статуса
  94. $res .= "<div class='statuses-{$value['statusType']}'> {$value['statusText']} </div>";
  95. }
  96. return $res;
  97. }
  98. /**
  99. * Екшън, който се използва от ajax'a, за визуализиране на статус съобщенията
  100. */
  101. function act_AjaxGetStatuses()
  102. {
  103. //Всички статуси за текущия потребител
  104. $recs = $this->getStatuses();
  105. //Задаваме текущото време
  106. Mode::setPermanent('lastNotificationTime', time());
  107. //Енкодираме записите в json формат
  108. $json = json_encode($recs);
  109. //Извеждаме записити на екрана
  110. echo $json;
  111. //Прекраряваме изпълнението на кода по нататаък
  112. die;
  113. }
  114. }