Visman 7 anos atrás
pai
commit
a89b78391f

+ 4 - 0
app/Controllers/Routing.php

@@ -82,6 +82,10 @@ class Routing
                 // юзеры
                 $r->add('GET', '/user/{id:[1-9]\d*}/{name}', 'Profile:view', 'User'); //????
             }
+            // пометка разделов прочитанными
+            if (! $user->isGuest) {
+                $r->add('GET', '/forum/{id:\d+}/markread/{token}', 'Misc:markread', 'MarkRead');
+            }
 
             // разделы
             $r->add('GET',           '/forum/{id:[1-9]\d*}/{name}[/{page:[1-9]\d*}]', 'Forum:view',    'Forum'   );

+ 67 - 0
app/Models/Forum/Markread.php

@@ -0,0 +1,67 @@
+<?php
+
+namespace ForkBB\Models\Forum;
+
+use ForkBB\Models\Action;
+use ForkBB\Models\Forum\Model as Forum;
+use ForkBB\Models\User\Model as User;
+use RuntimeException;
+
+class Markread extends Action
+{
+    /**
+     * Пометка всех тем/разделов прочитанными
+     *
+     * @param Forum $forum
+     *
+     * @throws RuntimeException
+     *
+     * @return Forum
+     */
+    public function markread(Forum $forum, User $user)
+    {
+        if ($user->isGuest) {
+            throw new RuntimeException('Expected user, not guest');
+        }
+
+        if (0 === $forum->id) {
+            $user->u_mark_all_read = time();
+
+            $this->c->users->update($user);
+
+            $vars = [
+                ':uid' => $user->id,
+            ];
+            $sql = 'DELETE FROM ::mark_of_topic WHERE uid=?i:uid';
+            $this->c->DB->exec($sql, $vars);
+
+            $sql = 'DELETE FROM ::mark_of_forum WHERE uid=?i:uid';
+            $this->c->DB->exec($sql, $vars);
+        } elseif ($forum->id > 0) {
+            $vars = [
+                ':uid'  => $user->id,
+                ':fid'  => $forum->id,
+                ':mark' => time(),
+            ];
+            $sql = 'DELETE FROM ::mark_of_topic
+                    WHERE uid=?i:uid AND tid IN (
+                        SELECT id
+                        FROM ::topics
+                        WHERE forum_id=?i:fid
+                    )';
+            $this->c->DB->exec($sql, $vars);
+
+            if ($user->mf_mark_all_read) {                                           // ????
+                $sql = 'UPDATE ::mark_of_forum
+                        SET mf_mark_all_read=?i:mark
+                        WHERE uid=?i:uid AND fid=?i:fid';
+            } else {                                                                 // ????
+                $sql = 'INSERT INTO ::mark_of_forum (uid, fid, mf_mark_all_read)
+                        VALUES (?i:uid, ?i:fid, ?i:mark)';
+            }
+            $this->c->DB->exec($sql, $vars);
+        } else {
+            throw new RuntimeException('The model does not have ID');
+        }
+    }
+}

+ 30 - 3
app/Models/Forum/Model.php

@@ -27,7 +27,7 @@ class Model extends DataModel
 
     /**
      * Статус возможности создания новой темы
-     * 
+     *
      * @return bool
      */
     protected function getcanCreateTopic()
@@ -39,6 +39,16 @@ class Model extends DataModel
             || $user->isModerator($this);
     }
 
+    /**
+     * Статус возможности пометки всех тем прочтенными
+     *
+     * @return bool
+     */
+    protected function getcanMarkRead()
+    {
+        return ! $this->c->user->isGuest; // ????
+    }
+
     /**
      * Получение массива подразделов
      *
@@ -78,7 +88,11 @@ class Model extends DataModel
      */
     protected function getlink()
     {
-        return $this->c->Router->link('Forum', ['id' => $this->id, 'name' => $this->forum_name]);
+        if (0 === $this->id) {
+            return $this->c->Router->link('Index');
+        } else {
+            return $this->c->Router->link('Forum', ['id' => $this->id, 'name' => $this->forum_name]);
+        }
     }
 
     /**
@@ -97,7 +111,7 @@ class Model extends DataModel
 
     /**
      * Ссылка на создание новой темы
-     * 
+     *
      * @return string
      */
     protected function getlinkCreateTopic()
@@ -105,6 +119,19 @@ class Model extends DataModel
         return $this->c->Router->link('NewTopic', ['id' => $this->id]);
     }
 
+    /**
+     * Ссылка на пометку всех тем прочтенными
+     *
+     * @return string
+     */
+    protected function getlinkMarkRead()
+    {
+        return $this->c->Router->link('MarkRead', [
+                'id'    => $this->id,
+                'token' => $this->c->Csrf->create('MarkRead', ['id' => $this->id]),
+            ]);
+    }
+
     /**
      * Получение массива модераторов
      *

+ 7 - 0
app/Models/Pages/Index.php

@@ -46,6 +46,13 @@ class Index extends Page
         $this->online       = $this->c->Online->calc($this)->info();
         $this->categoryes   = $ctgs;
 
+        if (! $this->user->isGuest) {
+            $this->linkMarkRead = $this->c->Router->link('MarkRead', [
+                    'id'    => 0,
+                    'token' => $this->c->Csrf->create('MarkRead', ['id' => 0]),
+                ]);
+        }
+
         return $this;
     }
 }

+ 39 - 0
app/Models/Pages/Misc.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace ForkBB\Models\Pages;
+
+use ForkBB\Models\Page;
+
+class Misc extends Page
+{
+    /**
+     * Пометка раздела прочитанным
+     *
+     * @param array $args
+     *
+     * @return Page
+     */
+    public function markread(array $args)
+    {
+        $forum = $this->c->forums->loadTree($args['id']);
+        if (null === $forum) {
+            return $this->c->Message->message('Bad request');
+        }
+
+        if (! $this->c->Csrf->verify($args['token'], 'MarkRead', $args)) {
+            return $this->c->Redirect->url($forum->link)->message('Bad token');
+        }
+
+        $this->c->DB->beginTransaction();
+
+        $this->c->forums->markread($forum, $this->user); // ???? флуд интервал?
+
+        $this->c->DB->commit();
+
+        $this->c->Lang->load('misc');
+
+        $message = $forum->id ? 'Mark forum read redirect' : 'Mark read redirect';
+
+        return $this->c->Redirect->url($forum->link)->message($message);
+    }
+}

+ 9 - 9
app/Models/Pages/Redirect.php

@@ -8,20 +8,20 @@ class Redirect extends Page
 {
     /**
      * Перенаправление на главную страницу форума
-     * 
+     *
      * @return Page
      */
     public function toIndex()
     {
-        return $this->page('Index')->message(\ForkBB\__('Redirecting to index'));
+        return $this->page('Index')->message('Redirecting to index');
     }
 
     /**
      * Задает адрес перехода
-     * 
+     *
      * @param string $marker
      * @param array $args
-     * 
+     *
      * @return Page
      */
     public function page($marker, array $args = [])
@@ -32,9 +32,9 @@ class Redirect extends Page
 
     /**
      * Задает ссылку для перехода
-     * 
+     *
      * @param string $url
-     * 
+     *
      * @return Page
      */
     public function url($url)
@@ -45,9 +45,9 @@ class Redirect extends Page
 
     /**
      * Задает сообщение
-     * 
+     *
      * @param string $message
-     * 
+     *
      * @return Page
      */
     public function message($message)
@@ -69,7 +69,7 @@ class Redirect extends Page
     /**
      * Возвращает HTTP заголовки страницы
      * $this->httpHeaders
-     * 
+     *
      * @return array
      */
     protected function getHttpHeaders()

+ 2 - 0
app/config/main.dist.php

@@ -135,6 +135,7 @@ return [
         'Maintenance'     => \ForkBB\Models\Pages\Maintenance::class,
         'Ban'             => \ForkBB\Models\Pages\Ban::class,
         'Debug'           => \ForkBB\Models\Pages\Debug::class,
+        'Misc'            => \ForkBB\Models\Pages\Misc::class,
         'AdminIndex'      => \ForkBB\Models\Pages\Admin\Index::class,
         'AdminStatistics' => \ForkBB\Models\Pages\Admin\Statistics::class,
         'AdminOptions'    => \ForkBB\Models\Pages\Admin\Options::class,
@@ -193,6 +194,7 @@ return [
         'ForumManagerLoadTree' => \ForkBB\Models\Forum\LoadTree::class,
         'ForumManagerSave'     => \ForkBB\Models\Forum\Save::class,
         'ForumManagerDelete'   => \ForkBB\Models\Forum\Delete::class,
+        'ForumManagerMarkread' => \ForkBB\Models\Forum\Markread::class,
 
         'TopicModel'         => \ForkBB\Models\Topic\Model::class,
         'TopicModelCalcStat' => \ForkBB\Models\Topic\CalcStat::class,

+ 0 - 6
app/lang/English/common.po

@@ -346,12 +346,6 @@ msgstr "Find topics with no replies."
 msgid "Show posted topics"
 msgstr "Find topics you have posted to."
 
-msgid "Mark all as read"
-msgstr "Mark all topics as read"
-
-msgid "Mark forum read"
-msgstr "Mark this forum as read"
-
 msgid "Title separator"
 msgstr " - "
 

+ 235 - 0
app/lang/English/misc.po

@@ -0,0 +1,235 @@
+#
+msgid ""
+msgstr ""
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Project-Id-Version: ForkBB\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: ForkBB <mio.visman@yandex.ru>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en\n"
+
+msgid "Mark read redirect"
+msgstr "All topics and forums have been marked as read. Redirecting …"
+
+msgid "Mark forum read redirect"
+msgstr "All topics in the specified forum have been marked as read. Redirecting …"
+
+msgid "Form email disabled"
+msgstr "The user you are trying to send an email to has disabled form email."
+
+msgid "No email subject"
+msgstr "You must enter a subject."
+
+msgid "No email message"
+msgstr "You must enter a message."
+
+msgid "Too long email message"
+msgstr "Messages cannot be longer than 65535 characters (64 KB)."
+
+msgid "Email flood"
+msgstr "At least %s seconds have to pass between sent emails. Please wait %s seconds and try sending again."
+
+msgid "Email sent redirect"
+msgstr "Email sent. Redirecting …"
+
+msgid "Send email to"
+msgstr "Send email to"
+
+msgid "Email subject"
+msgstr "Subject"
+
+msgid "Email message"
+msgstr "Message"
+
+msgid "Email disclosure note"
+msgstr "Please note that by using this form, your email address will be disclosed to the recipient."
+
+msgid "Write email"
+msgstr "Write and submit your email message"
+
+msgid "No reason"
+msgstr "You must enter a reason."
+
+msgid "Reason too long"
+msgstr "Your message must be under 65535 bytes (~64kb)."
+
+msgid "Report flood"
+msgstr "At least %s seconds have to pass between reports. Please wait %s seconds and try sending again."
+
+msgid "Report redirect"
+msgstr "Post reported. Redirecting …"
+
+msgid "Report post"
+msgstr "Report post"
+
+msgid "Reason"
+msgstr "Reason"
+
+msgid "Reason desc"
+msgstr "Please enter a short reason why you are reporting this post"
+
+msgid "Already subscribed topic"
+msgstr "You are already subscribed to this topic."
+
+msgid "Already subscribed forum"
+msgstr "You are already subscribed to this forum."
+
+msgid "Subscribe redirect"
+msgstr "Your subscription has been added. Redirecting …"
+
+msgid "Not subscribed topic"
+msgstr "You are not subscribed to this topic."
+
+msgid "Not subscribed forum"
+msgstr "You are not subscribed to this forum."
+
+msgid "Unsubscribe redirect"
+msgstr "Your subscription has been removed. Redirecting …"
+
+msgid "Moderate"
+msgstr "Moderate"
+
+msgid "Select"
+msgstr "Select"
+
+msgid "Move"
+msgstr "Move"
+
+msgid "Split"
+msgstr "Split"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Merge"
+msgstr "Merge"
+
+msgid "Lang changed"
+msgstr "Language is changed. Redirecting &hellip;"
+
+msgid "Open"
+msgstr "Open"
+
+msgid "Close"
+msgstr "Close"
+
+msgid "Move topic"
+msgstr "Move topic"
+
+msgid "Move topics"
+msgstr "Move topics"
+
+msgid "Move legend"
+msgstr "Select destination of move"
+
+msgid "Move to"
+msgstr "Move to"
+
+msgid "Nowhere to move"
+msgstr "There are no forums into which you can move topics."
+
+msgid "Leave redirect"
+msgstr "Leave redirect topic(s)"
+
+msgid "Move topic redirect"
+msgstr "Topic moved. Redirecting …"
+
+msgid "Move topics redirect"
+msgstr "Topics moved. Redirecting …"
+
+msgid "Confirm delete legend"
+msgstr "Please confirm deletion"
+
+msgid "Delete topics"
+msgstr "Delete topics"
+
+msgid "Delete topics comply"
+msgstr "Are you sure you want to delete the selected topics?"
+
+msgid "Delete topics redirect"
+msgstr "Topics deleted. Redirecting …"
+
+msgid "Open topic redirect"
+msgstr "Topic opened. Redirecting …"
+
+msgid "Open topics redirect"
+msgstr "Topics opened. Redirecting …"
+
+msgid "Close topic redirect"
+msgstr "Topic closed. Redirecting …"
+
+msgid "Close topics redirect"
+msgstr "Topics closed. Redirecting …"
+
+msgid "No topics selected"
+msgstr "You must select at least one topic for move/delete/open/close."
+
+msgid "Not enough topics selected"
+msgstr "You must select at least two topics for merge."
+
+msgid "Stick topic redirect"
+msgstr "Topic sticked. Redirecting …"
+
+msgid "Unstick topic redirect"
+msgstr "Topic unsticked. Redirecting …"
+
+msgid "Merge topics"
+msgstr "Merge topics"
+
+msgid "Merge topics redirect"
+msgstr "Topics merged. Redirecting …"
+
+msgid "Confirm merge legend"
+msgstr "Please confirm merge"
+
+msgid "New subject"
+msgstr "New subject"
+
+msgid "Confirm split legend"
+msgstr "Please confirm split of selected posts and select destination of move."
+
+msgid "Split posts"
+msgstr "Split posts"
+
+msgid "Split posts comply"
+msgstr "Are you sure you want to split the selected posts?"
+
+msgid "Split posts redirect"
+msgstr "Posts have been split. Redirecting …"
+
+msgid "Delete posts"
+msgstr "Delete posts"
+
+msgid "Cannot select first"
+msgstr "First post cannot be selected for split/delete."
+
+msgid "Delete posts comply"
+msgstr "Are you sure you want to delete the selected posts?"
+
+msgid "Delete posts redirect"
+msgstr "Posts deleted. Redirecting …"
+
+msgid "No posts selected"
+msgstr "You must select at least one post for split/delete."
+
+msgid "Host info 1"
+msgstr "The IP address is: %s"
+
+msgid "Host info 2"
+msgstr "The host name is: %s"
+
+msgid "Show more users"
+msgstr "Show more users for this IP"
+
+msgid "Move posts"
+msgstr "Move posts"
+
+msgid "Move posts redirect"
+msgstr "Posts moved. Redirecting …"
+
+msgid "Post from topic"
+msgstr "This post is moved from topic"

+ 9 - 0
app/lang/English/subforums.po

@@ -35,3 +35,12 @@ msgstr[1] "<strong>%s</strong> Posts"
 
 msgid "Moderated by"
 msgstr "Moderated by"
+
+msgid "Mark all as read"
+msgstr "Mark all topics as read"
+
+msgid "Mark forum read"
+msgstr "Mark this forum as read"
+
+msgid "All is read"
+msgstr "All is read"

+ 0 - 6
app/lang/Russian/common.po

@@ -348,12 +348,6 @@ msgstr "Найти темы без ответов."
 msgid "Show posted topics"
 msgstr "Найти темы с вашим участием."
 
-msgid "Mark all as read"
-msgstr "Отметить всё как прочтённое"
-
-msgid "Mark forum read"
-msgstr "Отметить раздел как прочтённый"
-
 msgid "Title separator"
 msgstr " - "
 

+ 235 - 0
app/lang/Russian/misc.po

@@ -0,0 +1,235 @@
+#
+msgid ""
+msgstr ""
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Project-Id-Version: ForkBB\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: ForkBB <mio.visman@yandex.ru>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+
+msgid "Mark read redirect"
+msgstr "Все темы и разделы помечены прочитанными. Переадресация &hellip;"
+
+msgid "Mark forum read redirect"
+msgstr "Все темы выбранного раздела помечены прочитанными. Переадресация &hellip;"
+
+msgid "Form email disabled"
+msgstr "Пользователь, которому вы пытаетесь отправить письмо, отключил такую возможность."
+
+msgid "No email subject"
+msgstr "Вы должны ввести заголовок."
+
+msgid "No email message"
+msgstr "Вы должны ввести текст письма."
+
+msgid "Too long email message"
+msgstr "Сообщение должно быть не длиннее 65535 символов (64 KB)."
+
+msgid "Email flood"
+msgstr "По крайней мере %s секунд должно пройти между отправками писем. Пожалуйста, подождите %s секунд и попробуйте снова."
+
+msgid "Email sent redirect"
+msgstr "Письмо отправлено. Переадресация &hellip;"
+
+msgid "Send email to"
+msgstr "Отправить сообщение для"
+
+msgid "Email subject"
+msgstr "Заголовок"
+
+msgid "Email message"
+msgstr "Сообщение"
+
+msgid "Email disclosure note"
+msgstr "Имейте в виду, что ваш почтовый адрес будет виден получателю письма."
+
+msgid "Write email"
+msgstr "Форма для составления и отправки письма"
+
+msgid "No reason"
+msgstr "Пожалуйста, введите причину."
+
+msgid "Reason too long"
+msgstr "Ваше сообщение не должно превышать 65535 байт (~64Кб)."
+
+msgid "Report flood"
+msgstr "По крайней мере %s секунд должно пройти между сигналами. Пожалуйста, подождите %s секунд и попробуйте снова."
+
+msgid "Report redirect"
+msgstr "Сигнал отправлен. Переадресация &hellip;"
+
+msgid "Report post"
+msgstr "Сигнал модератору"
+
+msgid "Reason"
+msgstr "Причина обращения"
+
+msgid "Reason desc"
+msgstr "Пожалуйста, кратко опишите причину создания этого сигнала (жалобы)"
+
+msgid "Already subscribed topic"
+msgstr "Вы уже подписаны на эту тему."
+
+msgid "Already subscribed forum"
+msgstr "Вы уже подписаны на этот раздел."
+
+msgid "Subscribe redirect"
+msgstr "Подписка добавлена. Переадресация &hellip;"
+
+msgid "Not subscribed topic"
+msgstr "Вы не подписаны на эту тему."
+
+msgid "Not subscribed forum"
+msgstr "Вы не подписаны на этот раздел."
+
+msgid "Unsubscribe redirect"
+msgstr "Подписка удалена. Переадресация &hellip;"
+
+msgid "Moderate"
+msgstr "Модерирование"
+
+msgid "Select"
+msgstr "Выбрать"
+
+msgid "Move"
+msgstr "Перенести"
+
+msgid "Split"
+msgstr "Разделить"
+
+msgid "Delete"
+msgstr "Удалить"
+
+msgid "Merge"
+msgstr "Объединить"
+
+msgid "Lang changed"
+msgstr "Язык изменен. Переадресация &hellip;"
+
+msgid "Open"
+msgstr "Открыть"
+
+msgid "Close"
+msgstr "Закрыть"
+
+msgid "Move topic"
+msgstr "Перенос темы"
+
+msgid "Move topics"
+msgstr "Перенос тем"
+
+msgid "Move legend"
+msgstr "Выберите раздел-получатель"
+
+msgid "Move to"
+msgstr "Перенести в"
+
+msgid "Nowhere to move"
+msgstr "Нет раздела, куда бы вы могли перенести тему(ы)."
+
+msgid "Leave redirect"
+msgstr "Оставить тему(ы) переадресации"
+
+msgid "Move topic redirect"
+msgstr "Тема перенесена. Переадресация &hellip;"
+
+msgid "Move topics redirect"
+msgstr "Темы перенесены. Переадресация &hellip;"
+
+msgid "Confirm delete legend"
+msgstr "Пожалуйста, подтвердите удаление"
+
+msgid "Delete topics"
+msgstr "Удаление тем"
+
+msgid "Delete topics comply"
+msgstr "Вы уверены, что хотите удалить отмеченные темы?"
+
+msgid "Delete topics redirect"
+msgstr "Темы удалены. Переадресация &hellip;"
+
+msgid "Open topic redirect"
+msgstr "Тема открыта. Переадресация &hellip;"
+
+msgid "Open topics redirect"
+msgstr "Темы открыты. Переадресация &hellip;"
+
+msgid "Close topic redirect"
+msgstr "Тема закрыта. Переадресация &hellip;"
+
+msgid "Close topics redirect"
+msgstr "Темы закрыты. Переадресация &hellip;"
+
+msgid "No topics selected"
+msgstr "Вы должны выбрать хотя бы одну тему для переноса/удаления/открытия/закрытия."
+
+msgid "Not enough topics selected"
+msgstr "Вы должны выбрать хотя бы две темы для объединения."
+
+msgid "Stick topic redirect"
+msgstr "Тема выделена. Переадресация &hellip;"
+
+msgid "Unstick topic redirect"
+msgstr "Выделение темы снято. Переадресация &hellip;"
+
+msgid "Merge topics"
+msgstr "Объединение тем"
+
+msgid "Merge topics redirect"
+msgstr "Темы объединены. Переадресация &hellip;"
+
+msgid "Confirm merge legend"
+msgstr "Пожалуйста, подтвердите объединение"
+
+msgid "New subject"
+msgstr "Название новой темы"
+
+msgid "Confirm split legend"
+msgstr "Пожалуйста, подтвердите разделение выбранных сообщений и укажите место переноса."
+
+msgid "Split posts"
+msgstr "Разделение сообщений"
+
+msgid "Split posts comply"
+msgstr "Вы уверены, что хотите разделить выбранные сообщения?"
+
+msgid "Split posts redirect"
+msgstr "Сообщения разделены. Переадресация &hellip;"
+
+msgid "Delete posts"
+msgstr "Удаление сообщений"
+
+msgid "Cannot select first"
+msgstr "Первое сообщение не может быть выбрано."
+
+msgid "Delete posts comply"
+msgstr "Вы уверены, что хотите удалить выбранные сообщения?"
+
+msgid "Delete posts redirect"
+msgstr "Сообщения удалены. Переадресация &hellip;"
+
+msgid "No posts selected"
+msgstr "Вы должны выбрать хотя бы одно сообщение для данного действия."
+
+msgid "Host info 1"
+msgstr "IP адрес: %s"
+
+msgid "Host info 2"
+msgstr "Имя хоста: %s"
+
+msgid "Show more users"
+msgstr "Показать еще информацию по IP"
+
+msgid "Move posts"
+msgstr "Перенос сообщений"
+
+msgid "Move posts redirect"
+msgstr "Сообщения перенесены. Переадресация &hellip;"
+
+msgid "Post from topic"
+msgstr "Это сообщение перенесено из темы"

+ 9 - 0
app/lang/Russian/subforums.po

@@ -41,3 +41,12 @@ msgid_plural "Moderated by"
 msgstr[0] "Модератор:"
 msgstr[1] "Модераторы:"
 msgstr[2] "Модераторы:"
+
+msgid "Mark all as read"
+msgstr "Отметить все разделы прочитанными"
+
+msgid "Mark forum read"
+msgstr "Отметить все темы в этом раздел прочитанными"
+
+msgid "All is read"
+msgstr "Всё прочитано"

+ 16 - 10
app/templates/forum.tpl

@@ -11,13 +11,6 @@
   @endforeach
       </ul>
 @endsection
-@section ('linknewtopic')
-  @if ($p->model->canCreateTopic)
-        <div class="f-actions-links">
-          <a class="f-btn f-btn-create-topic" href="{!! $p->model->linkCreateTopic !!}">{!! __('Post topic') !!}</a>
-        </div>
-  @endif
-@endsection
 @section ('pagination')
   @if ($p->model->pagination)
         <nav class="f-pages">
@@ -65,7 +58,11 @@
 @if ($p->model->canCreateTopic || $p->model->pagination)
       <div class="f-nlinks-b clearfix">
   @yield ('pagination')
-  @yield ('linknewtopic')
+  @if ($p->model->canCreateTopic)
+        <div class="f-actions-links">
+          <a class="f-btn f-btn-create-topic" href="{!! $p->model->linkCreateTopic !!}">{!! __('Post topic') !!}</a>
+        </div>
+  @endif
       </div>
 @endif
     </div>
@@ -154,9 +151,18 @@
       </div>
     </section>
     <div class="f-nav-links">
-  @if ($p->model->canCreateTopic || $p->model->pagination)
+  @if ($p->model->canCreateTopic || $p->model->pagination || $p->model->canMarkRead)
       <div class="f-nlinks-a clearfix">
-    @yield ('linknewtopic')
+    @if ($p->model->canCreateTopic || $p->model->canMarkRead)
+        <div class="f-actions-links">
+      @if ($p->model->canMarkRead)
+          <a class="f-btn f-btn-markread" title="{!! __('Mark forum read') !!}" href="{!! $p->model->linkMarkRead !!}">{!! __('All is read') !!}</a>
+      @endif
+      @if ($p->model->canCreateTopic)
+          <a class="f-btn f-btn-create-topic" href="{!! $p->model->linkCreateTopic !!}">{!! __('Post topic') !!}</a>
+        </div>
+      @endif
+    @endif
     @yield ('pagination')
       </div>
   @endif

+ 9 - 0
app/templates/index.tpl

@@ -17,5 +17,14 @@
   @endforeach
       </ol>
     </section>
+  @if ($p->linkMarkRead)
+    <div class="f-nav-links">
+      <div class="f-nlinks clearfix">
+        <div class="f-actions-links">
+          <a class="f-btn f-btn-markread" title="{!! __('Mark all as read') !!}" href="{!! $p->linkMarkRead !!}">{!! __('All is read') !!}</a>
+        </div>
+      </div>
+    </div>
+  @endif
 @endif
 @include ('layouts/stats')

+ 9 - 0
public/style/ForkBB/style.css

@@ -1167,6 +1167,15 @@ select {
   content: " ]";
 }
 
+.f-btn-markread {
+  opacity: 0.5;
+}
+
+.f-btn-markread:focus,
+.f-btn-markread:hover {
+  opacity: 1;
+}
+
 /*
 .icon-document:before {
   content: "\e900";