Code Monkey home page Code Monkey logo

flarum-discussion-views's Introduction

Flarum discussion views

This is an extension for the flarum forum software where you can track how many times a discussion has been viewed.

Installation

Execute this command in your flarum root: composer require michaelbelgium/flarum-discussion-views

Update

Execute these commands to update the extension.

composer update michaelbelgium/flarum-discussion-views
php flarum migrate
php flarum cache:clear

Translations

If you would like to translate this extension to your language, make a PR in the corresponding language pack.

Features

  • Tracks how much a discussion has been viewed and displays it on a discussion page
  • Plenty of extension settings
  • Adds 2 sorting options: popular and unpopular
  • Adds an event which developers can listen for: DiscussionWasViewed
  • Adds new permissions:
    • Reset the viewcount of a discussion (default to admins)
    • View the viewcount of a discussion (default to admins)

Media

Normal:

image

Smaller screens:

Imgur

Reset the view count

Imgur

Extension settings

Imgur

Viewlist

Imgur

Footer viewlist

Imgur imgur

flarum-discussion-views's People

Contributors

cubercsl avatar datlechin avatar hiobi avatar hona avatar luceos avatar michaelbelgium avatar nmfnc avatar rob006 avatar spaeps avatar spekulatius avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

flarum-discussion-views's Issues

SPA crash when trying to load discussion lower down

I have not experienced this bug myself but I can see it while investigating this report by a Discuss user https://discuss.flarum.org/d/32514-email-notification-url-leads-to-a-broken-page

The discussion page appears broken (header and scrubber visible, remaining of the page blank)

The javascript console shows

TypeError: e.posts()[0] is undefined
    <anonymous> AddLists.js:56
    e extend.ts:39
    [...]

This trace points to line 56 here:

if(discussion.posts() === false || discussion.posts().length == 0) return;
const firstPostId = discussion.posts()[0].id();

The problem is that the code assumes that if discussion.posts().length is > 0, [0] will be an instance of Post. But it's not the case. Once loaded, the posts() relationship always returns an array the length of the discussion, with Post instances within the loaded range, and undefined outside the loaded range.

When loading a discussion via direct link, Flarum only loads the specified range (10 posts before and after the given target), so index 0 might not be loaded.

This problem doesn't occur when navigating from the homepage, even if the link leads to the bottom of the discussion because the homepage hydrates the discussion.firstPost() relationship which causes [0] to be available as well. But direct access to the discussion doesn't include firstPost relationship unless an extension explicitly add it so it's not available.

My suggestion to fix this issue would be to use the ApiController extender to add firstPost as an include on ShowDiscussionController. The code can then also be refactored to read the ID from that relationship instead of the posts relationship.

Or if knowing which post is the first post when it's out of range is not important (just looking at that method, it looks like it would not matter), the statement should be refactored to account for undefined value. The check for length can be dropped. When scrolling to the top, the value would become available once index 0 is within visible range.

Edit views of a discussion

Add ability to edit the views of a discussion because it's not tracking unique views. If needed admins can set the views back to an acceptable value.

Viewlist in footer of post

Idea: in the footer of the main post, list the viewers.

image

"x, y, z and 5 others viewed this"

Will do research first if this is possible (views are linked to a discussion, not a post). If it is possible then gotta look towards settings/personalization:

  • remove the "old" viewlist and replace it with the footer viewlist?
  • keep the "old" viewlist and add the footer viewlist as a setting?
  • ...

Use IP provided by http header instead of $_SERVER

When my server running flarum is behind a NAT server, the U/V function only records the IP of proxy, and I sometimes see errors like flarum.ERROR: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'ip' cannot be null in /www/wwwroot/192.168.5.132/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:117, which prevents realtime plugins to function, even turning U/V off does not work.

Use getServerParams instead of $_SERVER

I'm setting up Swoole for my Flarum instance. However, I'm encountering some issues with this extension.

In Swoole, I have created a server param array and passed it to Laravel's request interface. But this plugin doesn't use it, it uses $_SERVER which has no values in this environment, causing my Flarum to complain about it.

Next Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'ip' cannot be null (SQL: insert into `forum_discussion_views` (`discussion_id`, `ip`, `visited_at`) values (236, ?, 2024-04-20 14:44:46)) in /var/www/web/vendor/illuminate/database/Connection.php:712

Design issue

I have no idea where to place the "eye" icon and the number.

For now I've put it behind the comments count but this overlaps with the triple dots for administrators when hovering over a discussion list item (on the right).
If it's put before the comments count then it overlaps with the tags (if extension is enabled).

If anyone has a better idea, feel free to pull request.

500 Internal Error

Installed on server, tried to reinstall and it didn't fix the issue
Happens when I try to create a discussion on the tag
Doesn't matter what tag it just doesn't work

Stack Trace:

POST https://forum.prealityv.com/api/discussions

{
  "errors": [
    {
      "code": 500,
      "title": "Internal server error",
      "detail": "PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'views' cannot be null in /var/www/forum/html/vendor/illuminate/database/Connection.php:390\nStack trace:\n#0 /var/www/forum/html/vendor/illuminate/database/Connection.php(390): PDOStatement->execute(Array)\n#1 /var/www/forum/html/vendor/illuminate/database/Connection.php(655): Illuminate\\Database\\Connection->Illuminate\\Database\\{closure}(Object(Illuminate\\Database\\MySqlConnection), 'insert into `di...', Array)\n#2 /var/www/forum/html/vendor/illuminate/database/Connection.php(618): Illuminate\\Database\\Connection->runQueryCallback('insert into `di...', Array, Object(Closure))\n#3 /var/www/forum/html/vendor/illuminate/database/Connection.php(391): Illuminate\\Database\\Connection->run('insert into `di...', Array, Object(Closure))\n#4 /var/www/forum/html/vendor/illuminate/database/Connection.php(347): Illuminate\\Database\\Connection->statement('insert into `di...', Array)\n#5 /var/www/forum/html/vendor/illuminate/database/Query/Processors/Processor.php(32): Illuminate\\Database\\Connection->insert('insert into `di...', Array)\n#6 /var/www/forum/html/vendor/illuminate/database/Query/Builder.php(1821): Illuminate\\Database\\Query\\Processors\\Processor->processInsertGetId(Object(Illuminate\\Database\\Query\\Builder), 'insert into `di...', Array, 'id')\n#7 [internal function]: Illuminate\\Database\\Query\\Builder->insertGetId(Array, 'id')\n#8 /var/www/forum/html/vendor/illuminate/database/Eloquent/Builder.php(1015): call_user_func_array(Array, Array)\n#9 /var/www/forum/html/vendor/illuminate/database/Eloquent/Model.php(1592): Illuminate\\Database\\Eloquent\\Builder->__call('insertGetId', Array)\n#10 /var/www/forum/html/vendor/illuminate/database/Eloquent/Model.php(1561): Illuminate\\Database\\Eloquent\\Model->insertAndSetId(Object(Illuminate\\Database\\Eloquent\\Builder), Array)\n#11 /var/www/forum/html/vendor/illuminate/database/Eloquent/Model.php(1452): Illuminate\\Database\\Eloquent\\Model->performInsert(Object(Illuminate\\Database\\Eloquent\\Builder), Array)\n#12 /var/www/forum/html/vendor/michaelbelgium/flarum-discussion-views/src/listeners/SaveDiscussionFromModal.php(19): Illuminate\\Database\\Eloquent\\Model->save()\n#13 [internal function]: michaelbelgium\\views\\listeners\\SaveDiscussionFromModal->OnDiscussionGetSaved(Object(Flarum\\Event\\DiscussionWillBeSaved))\n#14 /var/www/forum/html/vendor/illuminate/events/Dispatcher.php(221): call_user_func_array(Array, Array)\n#15 /var/www/forum/html/vendor/flarum/core/src/Core/Command/StartDiscussionHandler.php(73): Illuminate\\Events\\Dispatcher->fire('Flarum\\\\Event\\\\Di...')\n#16 [internal function]: Flarum\\Core\\Command\\StartDiscussionHandler->handle(Object(Flarum\\Core\\Command\\StartDiscussion))\n#17 /var/www/forum/html/vendor/illuminate/bus/Dispatcher.php(202): call_user_func(Array, Object(Flarum\\Core\\Command\\StartDiscussion))\n#18 [internal function]: Illuminate\\Bus\\Dispatcher->Illuminate\\Bus\\{closure}(Object(Flarum\\Core\\Command\\StartDiscussion))\n#19 /var/www/forum/html/vendor/illuminate/pipeline/Pipeline.php(139): call_user_func(Object(Closure), Object(Flarum\\Core\\Command\\StartDiscussion))\n#20 [internal function]: Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Flarum\\Core\\Command\\StartDiscussion))\n#21 /var/www/forum/html/vendor/illuminate/pipeline/Pipeline.php(102): call_user_func(Object(Closure), Object(Flarum\\Core\\Command\\StartDiscussion))\n#22 /var/www/forum/html/vendor/illuminate/bus/Dispatcher.php(204): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))\n#23 /var/www/forum/html/vendor/illuminate/bus/Dispatcher.php(177): Illuminate\\Bus\\Dispatcher->dispatchNow(Object(Flarum\\Core\\Command\\StartDiscussion), NULL)\n#24 /var/www/forum/html/vendor/flarum/core/src/Api/Controller/CreateDiscussionController.php(72): Illuminate\\Bus\\Dispatcher->dispatch(Object(Flarum\\Core\\Command\\StartDiscussion))\n#25 /var/www/forum/html/vendor/flarum/core/src/Api/Controller/AbstractSerializeController.php(97): Flarum\\Api\\Controller\\CreateDiscussionController->data(Object(Zend\\Stratigility\\Http\\Request), Object(Tobscure\\JsonApi\\Document))\n#26 /var/www/forum/html/vendor/flarum/core/src/Api/Controller/AbstractCreateController.php(23): Flarum\\Api\\Controller\\AbstractSerializeController->handle(Object(Zend\\Stratigility\\Http\\Request))\n#27 /var/www/forum/html/vendor/flarum/core/src/Http/Handler/ControllerRouteHandler.php(53): Flarum\\Api\\Controller\\AbstractCreateController->handle(Object(Zend\\Stratigility\\Http\\Request))\n#28 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/DispatchRoute.php(69): Flarum\\Http\\Handler\\ControllerRouteHandler->__invoke(Object(Zend\\Stratigility\\Http\\Request), Array)\n#29 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\DispatchRoute->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#30 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\DispatchRoute), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#31 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#32 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/SetLocale.php(51): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#33 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\SetLocale->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#34 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\SetLocale), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#35 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#36 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/AuthenticateWithHeader.php(58): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#37 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\AuthenticateWithHeader->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#38 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\AuthenticateWithHeader), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#39 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#40 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php(36): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#41 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\AuthenticateWithSession->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#42 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\AuthenticateWithSession), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#43 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#44 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php(39): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#45 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\RememberFromCookie->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#46 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\RememberFromCookie), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#47 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#48 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/StartSession.php(48): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#49 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\StartSession->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#50 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\StartSession), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#51 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#52 /var/www/forum/html/vendor/flarum/core/src/Api/Middleware/FakeHttpMethods.php(33): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#53 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Api\\Middleware\\FakeHttpMethods->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#54 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Api\\Middleware\\FakeHttpMethods), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#55 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#56 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php(31): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#57 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\ParseJsonBody->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#58 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\ParseJsonBody), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#59 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#60 /var/www/forum/html/vendor/flarum/core/src/Api/Middleware/HandleErrors.php(45): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#61 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Api\\Middleware\\HandleErrors->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#62 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Api\\Middleware\\HandleErrors), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#63 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#64 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php(111): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#65 /var/www/forum/html/vendor/flarum/core/src/Http/AbstractServer.php(55): Zend\\Stratigility\\MiddlewarePipe->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\NoopFinalHandler))\n#66 /var/www/forum/html/vendor/zendframework/zend-diactoros/src/Server.php(157): Flarum\\Http\\AbstractServer->__invoke(Object(Zend\\Diactoros\\ServerRequest), Object(Zend\\Diactoros\\Response), Object(Zend\\Stratigility\\NoopFinalHandler))\n#67 /var/www/forum/html/vendor/flarum/core/src/Http/AbstractServer.php(36): Zend\\Diactoros\\Server->listen(Object(Zend\\Stratigility\\NoopFinalHandler))\n#68 /var/www/forum/html/api.php(16): Flarum\\Http\\AbstractServer->listen()\n#69 {main}\n\nNext Illuminate\\Database\\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'views' cannot be null (SQL: insert into `discussions` (`title`, `slug`, `start_time`, `start_user_id`, `views`) values (fuck, fuck, 2018-01-03 08:23:52, 12, )) in /var/www/forum/html/vendor/illuminate/database/Connection.php:662\nStack trace:\n#0 /var/www/forum/html/vendor/illuminate/database/Connection.php(618): Illuminate\\Database\\Connection->runQueryCallback('insert into `di...', Array, Object(Closure))\n#1 /var/www/forum/html/vendor/illuminate/database/Connection.php(391): Illuminate\\Database\\Connection->run('insert into `di...', Array, Object(Closure))\n#2 /var/www/forum/html/vendor/illuminate/database/Connection.php(347): Illuminate\\Database\\Connection->statement('insert into `di...', Array)\n#3 /var/www/forum/html/vendor/illuminate/database/Query/Processors/Processor.php(32): Illuminate\\Database\\Connection->insert('insert into `di...', Array)\n#4 /var/www/forum/html/vendor/illuminate/database/Query/Builder.php(1821): Illuminate\\Database\\Query\\Processors\\Processor->processInsertGetId(Object(Illuminate\\Database\\Query\\Builder), 'insert into `di...', Array, 'id')\n#5 [internal function]: Illuminate\\Database\\Query\\Builder->insertGetId(Array, 'id')\n#6 /var/www/forum/html/vendor/illuminate/database/Eloquent/Builder.php(1015): call_user_func_array(Array, Array)\n#7 /var/www/forum/html/vendor/illuminate/database/Eloquent/Model.php(1592): Illuminate\\Database\\Eloquent\\Builder->__call('insertGetId', Array)\n#8 /var/www/forum/html/vendor/illuminate/database/Eloquent/Model.php(1561): Illuminate\\Database\\Eloquent\\Model->insertAndSetId(Object(Illuminate\\Database\\Eloquent\\Builder), Array)\n#9 /var/www/forum/html/vendor/illuminate/database/Eloquent/Model.php(1452): Illuminate\\Database\\Eloquent\\Model->performInsert(Object(Illuminate\\Database\\Eloquent\\Builder), Array)\n#10 /var/www/forum/html/vendor/michaelbelgium/flarum-discussion-views/src/listeners/SaveDiscussionFromModal.php(19): Illuminate\\Database\\Eloquent\\Model->save()\n#11 [internal function]: michaelbelgium\\views\\listeners\\SaveDiscussionFromModal->OnDiscussionGetSaved(Object(Flarum\\Event\\DiscussionWillBeSaved))\n#12 /var/www/forum/html/vendor/illuminate/events/Dispatcher.php(221): call_user_func_array(Array, Array)\n#13 /var/www/forum/html/vendor/flarum/core/src/Core/Command/StartDiscussionHandler.php(73): Illuminate\\Events\\Dispatcher->fire('Flarum\\\\Event\\\\Di...')\n#14 [internal function]: Flarum\\Core\\Command\\StartDiscussionHandler->handle(Object(Flarum\\Core\\Command\\StartDiscussion))\n#15 /var/www/forum/html/vendor/illuminate/bus/Dispatcher.php(202): call_user_func(Array, Object(Flarum\\Core\\Command\\StartDiscussion))\n#16 [internal function]: Illuminate\\Bus\\Dispatcher->Illuminate\\Bus\\{closure}(Object(Flarum\\Core\\Command\\StartDiscussion))\n#17 /var/www/forum/html/vendor/illuminate/pipeline/Pipeline.php(139): call_user_func(Object(Closure), Object(Flarum\\Core\\Command\\StartDiscussion))\n#18 [internal function]: Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Flarum\\Core\\Command\\StartDiscussion))\n#19 /var/www/forum/html/vendor/illuminate/pipeline/Pipeline.php(102): call_user_func(Object(Closure), Object(Flarum\\Core\\Command\\StartDiscussion))\n#20 /var/www/forum/html/vendor/illuminate/bus/Dispatcher.php(204): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))\n#21 /var/www/forum/html/vendor/illuminate/bus/Dispatcher.php(177): Illuminate\\Bus\\Dispatcher->dispatchNow(Object(Flarum\\Core\\Command\\StartDiscussion), NULL)\n#22 /var/www/forum/html/vendor/flarum/core/src/Api/Controller/CreateDiscussionController.php(72): Illuminate\\Bus\\Dispatcher->dispatch(Object(Flarum\\Core\\Command\\StartDiscussion))\n#23 /var/www/forum/html/vendor/flarum/core/src/Api/Controller/AbstractSerializeController.php(97): Flarum\\Api\\Controller\\CreateDiscussionController->data(Object(Zend\\Stratigility\\Http\\Request), Object(Tobscure\\JsonApi\\Document))\n#24 /var/www/forum/html/vendor/flarum/core/src/Api/Controller/AbstractCreateController.php(23): Flarum\\Api\\Controller\\AbstractSerializeController->handle(Object(Zend\\Stratigility\\Http\\Request))\n#25 /var/www/forum/html/vendor/flarum/core/src/Http/Handler/ControllerRouteHandler.php(53): Flarum\\Api\\Controller\\AbstractCreateController->handle(Object(Zend\\Stratigility\\Http\\Request))\n#26 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/DispatchRoute.php(69): Flarum\\Http\\Handler\\ControllerRouteHandler->__invoke(Object(Zend\\Stratigility\\Http\\Request), Array)\n#27 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\DispatchRoute->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#28 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\DispatchRoute), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#29 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#30 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/SetLocale.php(51): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#31 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\SetLocale->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#32 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\SetLocale), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#33 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#34 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/AuthenticateWithHeader.php(58): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#35 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\AuthenticateWithHeader->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#36 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\AuthenticateWithHeader), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#37 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#38 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php(36): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#39 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\AuthenticateWithSession->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#40 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\AuthenticateWithSession), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#41 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#42 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php(39): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#43 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\RememberFromCookie->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#44 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\RememberFromCookie), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#45 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#46 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/StartSession.php(48): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#47 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\StartSession->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#48 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\StartSession), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#49 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#50 /var/www/forum/html/vendor/flarum/core/src/Api/Middleware/FakeHttpMethods.php(33): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#51 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Api\\Middleware\\FakeHttpMethods->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#52 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Api\\Middleware\\FakeHttpMethods), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#53 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#54 /var/www/forum/html/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php(31): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#55 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Http\\Middleware\\ParseJsonBody->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#56 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Http\\Middleware\\ParseJsonBody), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#57 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#58 /var/www/forum/html/vendor/flarum/core/src/Api/Middleware/HandleErrors.php(45): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#59 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(212): Flarum\\Api\\Middleware\\HandleErrors->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#60 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Dispatch.php(88): Zend\\Stratigility\\Dispatch->dispatchCallableMiddleware(Object(Flarum\\Api\\Middleware\\HandleErrors), Object(Zend\\Stratigility\\Next), Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), NULL)\n#61 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/Next.php(160): Zend\\Stratigility\\Dispatch->__invoke(Object(Zend\\Stratigility\\Route), NULL, Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\Next))\n#62 /var/www/forum/html/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php(111): Zend\\Stratigility\\Next->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response))\n#63 /var/www/forum/html/vendor/flarum/core/src/Http/AbstractServer.php(55): Zend\\Stratigility\\MiddlewarePipe->__invoke(Object(Zend\\Stratigility\\Http\\Request), Object(Zend\\Stratigility\\Http\\Response), Object(Zend\\Stratigility\\NoopFinalHandler))\n#64 /var/www/forum/html/vendor/zendframework/zend-diactoros/src/Server.php(157): Flarum\\Http\\AbstractServer->__invoke(Object(Zend\\Diactoros\\ServerRequest), Object(Zend\\Diactoros\\Response), Object(Zend\\Stratigility\\NoopFinalHandler))\n#65 /var/www/forum/html/vendor/flarum/core/src/Http/AbstractServer.php(36): Zend\\Diactoros\\Server->listen(Object(Zend\\Stratigility\\NoopFinalHandler))\n#66 /var/www/forum/html/api.php(16): Flarum\\Http\\AbstractServer->listen()\n#67 {main}"
    }
  ]
}

View Count Goes Up on Refresh

When you refresh the page while on the same account, it updates the view count. I was wondering if there was an option/an option to be implemented where I could make it where when you views discussion, it only updates the count on your first view.

Back to all discussions bug

If you install 3.0 of this extension and install the Pages extension, go to a page and then use Flarum’s built in back button, the discussions won’t load. No errors are logged.

Show latest discussion viewers

Just like the profile views extension. It's possible to save who watches which discussion in the database. After that we can show the latest viewers under the posts nav on a discussion page.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.