Flarum Moderator Warnings

License Latest Stable Version

A Flarum extension. This allows moderators to warn users. Warnings can be applied from a post or from the user's profile. Each warning contains a number of strikes (0 - 5), a message visible to the user, and a message visible only to other moderators. Users will recieve notifications for warnings they recieve.

TODO

  • Suspend integration (automatically suspend if users reach more than X warnings, with X configurable in settings)

Installation

Use Bazaar or install manually with composer:

composer require askvortsov/flarum-moderator-warnings

Updating

composer update askvortsov/flarum-moderator-warnings

Feedback and Bugs

Please feel free to report any feedback/bugs/feature ideas on the discuss thread, or as an issue on the github!

Credit

Some UI componenets for this extension are based on / reuse some code from, Friends of Flarum's Moderator Notes extension. Thank you to Ian Morland and all the folks at GiffGaff for their hard work on moderator notes!

Links

    Alshain Could you send a screenshot of your permissions page and of the user warning page you are trying to access, with the authorized moderator logged in?

      Alshain Odd... Is there any way you could enable debug mode and send here what gets sent them? (there should be a debug button in the error alert then). Additionally, if you could open developer tools (inspect element), go to the network tab, and refresh the page, could you send a screenshot of that too?

        askvortsov

        `
        GET http://localhost/api/warnings/2

        {
        "errors": [
        {
        "status": "403",
        "code": "permission_denied",
        "detail": "Flarum\User\Exception\PermissionDeniedException in C:\xampp\htdocs\vendor\flarum\core\src\User\AssertPermissionTrait.php:31\nStack trace:\n#0 C:\xampp\htdocs\vendor\flarum\core\src\User\AssertPermissionTrait.php(61): Askvortsov\FlarumWarnings\Api\Controller\ListWarningsController->assertPermission(false)\n#1 C:\xampp\htdocs\vendor\askvortsov\flarum-moderator-warnings\src\Api\Controller\ListWarningsController.php(39): Askvortsov\FlarumWarnings\Api\Controller\ListWarningsController->assertCan(Object(Flarum\User\User), 'user.viewWarnin...', Object(Flarum\User\User))\n#2 C:\xampp\htdocs\vendor\flarum\core\src\Api\Controller\AbstractSerializeController.php(96): Askvortsov\FlarumWarnings\Api\Controller\ListWarningsController->data(Object(Laminas\Diactoros\ServerRequest), Object(Tobscure\JsonApi\Document))\n#3 C:\xampp\htdocs\vendor\flarum\core\src\Http\RouteHandlerFactory.php(38): Flarum\Api\Controller\AbstractSerializeController->handle(Object(Laminas\Diactoros\ServerRequest))\n#4 C:\xampp\htdocs\vendor\flarum\core\src\Http\Middleware\DispatchRoute.php(65): Flarum\Http\RouteHandlerFactory->Flarum\Http\{closure}(Object(Laminas\Diactoros\ServerRequest), Array)\n#5 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Flarum\Http\Middleware\DispatchRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Closure))\n#6 C:\xampp\htdocs\vendor\flarum\core\src\Http\Middleware\SetLocale.php(50): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#7 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Flarum\Http\Middleware\SetLocale->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#8 C:\xampp\htdocs\vendor\flarum\core\src\Http\Middleware\CheckCsrfToken.php(23): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#9 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Flarum\Http\Middleware\CheckCsrfToken->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#10 C:\xampp\htdocs\vendor\flarum\core\src\Http\Middleware\AuthenticateWithHeader.php(55): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#11 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Flarum\Http\Middleware\AuthenticateWithHeader->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#12 C:\xampp\htdocs\vendor\flarum\core\src\Http\Middleware\AuthenticateWithSession.php(32): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#13 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Flarum\Http\Middleware\AuthenticateWithSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#14 C:\xampp\htdocs\vendor\flarum\core\src\Http\Middleware\RememberFromCookie.php(51): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#15 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Flarum\Http\Middleware\RememberFromCookie->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#16 C:\xampp\htdocs\vendor\flarum\core\src\Http\Middleware\StartSession.php(61): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#17 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Flarum\Http\Middleware\StartSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#18 C:\xampp\htdocs\vendor\flarum\core\src\Api\Middleware\FakeHttpMethods.php(29): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#19 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Flarum\Api\Middleware\FakeHttpMethods->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#20 C:\xampp\htdocs\vendor\flarum\core\src\Http\Middleware\ParseJsonBody.php(28): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#21 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Flarum\Http\Middleware\ParseJsonBody->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#22 C:\xampp\htdocs\vendor\flarum\core\src\Http\Middleware\HandleErrors.php(57): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#23 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Flarum\Http\Middleware\HandleErrors->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#24 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\MiddlewarePipe.php(84): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#25 C:\xampp\htdocs\vendor\middlewares\request-handler\src\RequestHandler.php(84): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#26 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Middlewares\RequestHandler->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#27 C:\xampp\htdocs\vendor\middlewares\base-path-router\src\BasePathRouter.php(97): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#28 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Middlewares\BasePathRouter->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#29 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Middleware\OriginalMessages.php(42): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#30 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Laminas\Stratigility\Middleware\OriginalMessages->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#31 C:\xampp\htdocs\vendor\middlewares\base-path\src\BasePath.php(53): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#32 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\Next.php(61): Middlewares\BasePath->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))\n#33 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\MiddlewarePipe.php(84): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))\n#34 C:\xampp\htdocs\vendor\laminas\laminas-stratigility\src\MiddlewarePipe.php(73): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\EmptyPipelineHandler))\n#35 C:\xampp\htdocs\vendor\laminas\laminas-httphandlerrunner\src\RequestHandlerRunner.php(96): Laminas\Stratigility\MiddlewarePipe->handle(Object(Laminas\Diactoros\ServerRequest))\n#36 C:\xampp\htdocs\vendor\flarum\core\src\Http\Server.php(42): Laminas\HttpHandlerRunner\RequestHandlerRunner->run()\n#37 C:\xampp\htdocs\index.php(22): Flarum\Http\Server->listen()\n#38 {main}"
        }
        ]
        }
        `

          9 days later
          6 days later

          Thanks @askvortsov 🤗
          Eagerly waiting for "Suspend integration (automatically suspend if users reach more than X warnings, with X configurable in settings)"

          a month later

          Unknown Issue

          After opening this plugin, one discussion cannot be opened. Perhaps because the required post has been deleted.
          If you need more information (logs etc.) please tell me.

          image

          image

          image

          askvortsov Facing this after update

          Flarum encountered a boot error (Error)
          Class 'Flarum\Extend\Model' not found
          thrown in /home/admin/web/website/public_html/vendor/askvortsov/flarum-moderator-warnings/extend.php on line 43

          Looks like you need to upgrade Flarum to beta 13

            askvortsov Oh no, that would take time.
            Please help me fix this for now without upgrading to beta 13

            In the meantime, you could downgrade to the previous version (v0.1.5), or remove the extension till you have time to upgrade?

              askvortsov Ok sir, help me downgrade to previous version or remove the extension
              I tried it but don't know how to

              Try running composer require askvortsov/flarum-moderator-warnings v0.1.5

                6 days later

                Translations seem to be broken...
                I guess you are using app.translator.trans() where there should be app.translator.transChoice().

                screenshot

                (There may be more places where there is this bug than what you see on the screenshot, I haven't tested everything.)

                  Huh thanks for letting me know, I'll do some digging.