Browse Source

for online

Visman 8 years ago
parent
commit
52f0b53e5c

+ 13 - 10
app/Models/Online.php

@@ -15,6 +15,12 @@ class Online
      */
     protected $c;
 
+    /**
+     * Флаг выполнения
+     * @var bool
+     */
+    protected $done = false;
+
     /**
      * @var array
      */
@@ -30,12 +36,6 @@ class Online
      */
     protected $user;
 
-    /**
-     * Флаг выполнения
-     * @var bool
-     */
-    protected $flag = false;
-
     /**
      * Контролер
      * @param array $config
@@ -60,13 +60,16 @@ class Online
      */
     public function handle(Page $page)
     {
-        if ($this->flag) {
-            throw new RuntimeException('Repeated execution of actions over online data');
+        if ($this->done) {
+            return [[], [], []]; //????
         }
-        $this->flag = true;
+        $this->done = true;
 
-        //   string     bool   bool
+        //  string|null  bool   bool
         list($position, $type, $filter) = $page->getDataForOnline();  //???? возможно стоит возвращать полное имя страницы для отображение
+        if (null === $position) {
+            return [[], [], []]; //????
+        }
 
         $this->updateUser($position);
 

+ 6 - 0
app/Models/Pages/Auth.php

@@ -12,6 +12,12 @@ class Auth extends Page
      */
     protected $nameTpl = 'auth';
 
+    /**
+     * Позиция для таблицы онлайн текущего пользователя
+     * @var null|string
+     */
+    protected $onlinePos = 'login';
+
     /**
      * Указатель на активный пункт навигации
      * @var string

+ 6 - 0
app/Models/Pages/Ban.php

@@ -10,6 +10,12 @@ class Ban extends Page
      */
     protected $nameTpl = 'ban';
 
+    /**
+     * Позиция для таблицы онлайн текущего пользователя
+     * @var null|string
+     */
+    protected $onlinePos = 'ban';
+
     /**
      * HTTP статус ответа для данной страницы
      * @var int

+ 6 - 0
app/Models/Pages/Debug.php

@@ -10,6 +10,12 @@ class Debug extends Page
      */
     protected $nameTpl = 'layouts/debug';
 
+    /**
+     * Позиция для таблицы онлайн текущего пользователя
+     * @var null|string
+     */
+    protected $onlinePos = null;
+
     /**
      * Подготавливает данные для шаблона
      * @return Page

+ 1 - 1
app/Models/Pages/Index.php

@@ -12,7 +12,7 @@ class Index extends Page
 
     /**
      * Позиция для таблицы онлайн текущего пользователя
-     * @var string
+     * @var null|string
      */
     protected $onlinePos = 'index';
 

+ 8 - 2
app/Models/Pages/Maintenance.php

@@ -12,6 +12,12 @@ class Maintenance extends Page
      */
     protected $nameTpl = 'maintenance';
 
+    /**
+     * Позиция для таблицы онлайн текущего пользователя
+     * @var null|string
+     */
+    protected $onlinePos = null;
+
     /**
      * HTTP статус ответа для данной страницы
      * @var int
@@ -60,10 +66,10 @@ class Maintenance extends Page
     }
 
     /**
-     * Возврат предупреждений форума
+     * Возврат info, success, warning, error, validation информации
      * @return array
      */
-    protected function fWarning()
+    protected function getIswev()
     {
         return [];
     }

+ 12 - 9
app/Models/Pages/Page.php

@@ -55,18 +55,18 @@ abstract class Page
      */
     protected $data;
 
-    /**
-     * Позиция для таблицы онлайн текущего пользователя
-     * @var string
-     */
-    protected $onlinePos = '';
-
     /**
      * Массив info, success, warning, error, validation информации
      * @var array
      */
     protected $iswev = [];
 
+    /**
+     * Позиция для таблицы онлайн текущего пользователя
+     * @var null|string
+     */
+    protected $onlinePos = '';
+
     /**
      * Тип обработки пользователей онлайн
      * Если false, то идет обновление данных
@@ -319,11 +319,14 @@ abstract class Page
 
     /**
      * Возращает данные для управления обработкой пользователей онлайн
-     * @return array
+     * @param bool $short
+     * @return bool|array
      */
-    public function getDataForOnline()
+    public function getDataForOnline($short = false)
     {
-        return [$this->onlinePos, $this->onlineType, $this->onlineFilter];
+        return $short
+            ? null !== $this->onlinePos
+            : [$this->onlinePos, $this->onlineType, $this->onlineFilter];
     }
 
     /**

+ 6 - 0
app/Models/Pages/Redirect.php

@@ -10,6 +10,12 @@ class Redirect extends Page
      */
     protected $nameTpl = null;
 
+    /**
+     * Позиция для таблицы онлайн текущего пользователя
+     * @var null|string
+     */
+    protected $onlinePos = null;
+
     /**
      * Адрес перехода
      * @var string

+ 6 - 0
app/Models/Pages/Rules.php

@@ -10,6 +10,12 @@ class Rules extends Page
      */
     protected $nameTpl = 'rules';
 
+    /**
+     * Позиция для таблицы онлайн текущего пользователя
+     * @var null|string
+     */
+    protected $onlinePos = 'rules';
+
     /**
      * Указатель на активный пункт навигации
      * @var string

+ 3 - 0
app/bootstrap.php

@@ -65,6 +65,9 @@ while (! $page instanceof Page && $cur = array_pop($controllers)) {
 }
 
 if ($page instanceof Page) { //????
+    if ($page->getDataForOnline(true)) {
+        $container->get('Online')->handle($page);
+    }
     $tpl = $container->get('View')->setPage($page)->outputPage();
     if (defined('PUN_DEBUG')) {
         $debug = $container->get('Debug')->debug();