MichaelBelgium / flarum-profile-views

An extension for the Flarum forum software which tracks and displays profile views.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Conflict between profile-views and discussion-views

clarkwinkelmann opened this issue · comments

Enabling both profile-views and discussion-views extensions at the same time leads to errors.

The issue is that both extend.php files (https://github.com/MichaelBelgium/flarum-profile-views/blob/master/extend.php and https://github.com/MichaelBelgium/flarum-discussion-views/blob/master/extend.php) register the same global const variables RELATIONSHIP and RELATIONSHIP_LATEST in the same namespace.

I have not tried myself, but the problem was reported here https://discuss.flarum.org/d/7596-profile-views/50 and looking at the code it seems to be the logical explanation why a variable defined in profile-views ends up being used by discussion-views.

Relevant logs copied from the forum:

Both profile-views and discussion-views are installed at the latest version.

Illuminate\Database\Eloquent\RelationNotFoundException thrown with message "Call to undefined relationship [latestProfileViews] on model [Flarum\Discussion\Discussion]."

Stacktrace:
#61 Illuminate\Database\Eloquent\RelationNotFoundException in /var/www/flarum/vendor/illuminate/database/Eloquent/RelationNotFoundException.php:34
#60 Illuminate\Database\Eloquent\RelationNotFoundException:make in /var/www/flarum/vendor/illuminate/database/Eloquent/Builder.php:655
#59 Illuminate\Database\Eloquent\Builder:Illuminate\Database\Eloquent\{closure} in /var/www/flarum/vendor/illuminate/database/Eloquent/Relations/Relation.php:99
#58 Illuminate\Database\Eloquent\Relations\Relation:noConstraints in /var/www/flarum/vendor/illuminate/database/Eloquent/Builder.php:657
#57 Illuminate\Database\Eloquent\Builder:getRelation in /var/www/flarum/vendor/illuminate/database/Eloquent/Builder.php:625
#56 Illuminate\Database\Eloquent\Builder:eagerLoadRelation in /var/www/flarum/vendor/illuminate/database/Eloquent/Builder.php:605
#55 Illuminate\Database\Eloquent\Builder:eagerLoadRelations in /var/www/flarum/vendor/illuminate/database/Eloquent/Model.php:506
#54 Illuminate\Database\Eloquent\Model:load in /var/www/flarum/vendor/flarum/core/src/Api/Controller/ShowDiscussionController.php:102
#53 Flarum\Api\Controller\ShowDiscussionController:data in /var/www/flarum/vendor/flarum/core/src/Api/Controller/AbstractSerializeController.php:102
#52 Flarum\Api\Controller\AbstractSerializeController:handle in /var/www/flarum/vendor/flarum/core/src/Api/Client.php:72
#51 Flarum\Api\Client:send in /var/www/flarum/vendor/flarum/core/src/Forum/Content/Discussion.php:108
#50 Flarum\Forum\Content\Discussion:getApiDocument in /var/www/flarum/vendor/flarum/core/src/Forum/Content/Discussion.php:64
#49 Flarum\Forum\Content\Discussion:__invoke in /var/www/flarum/vendor/flarum/core/src/Frontend/Frontend.php:63
#48 Flarum\Frontend\Frontend:populate in /var/www/flarum/vendor/flarum/core/src/Frontend/Frontend.php:55
#47 Flarum\Frontend\Frontend:document in /var/www/flarum/vendor/flarum/core/src/Frontend/Controller.php:32
#46 Flarum\Frontend\Controller:handle in /var/www/flarum/vendor/flarum/core/src/Http/RouteHandlerFactory.php:38
#45 Flarum\Http\RouteHandlerFactory:Flarum\Http\{closure} in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php:27
#44 Flarum\Http\Middleware\ExecuteRoute:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#43 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/fof/pwned-passwords/src/Middleware/CheckPasswordReset.php:64
#42 FoF\PwnedPasswords\Middleware\CheckPasswordReset:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#41 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/fof/pwned-passwords/src/Middleware/CheckLoginPassword.php:53
#40 FoF\PwnedPasswords\Middleware\CheckLoginPassword:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#39 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/fof/pwned-passwords/src/Middleware/PreventPwnedPassword.php:71
#38 FoF\PwnedPasswords\Middleware\PreventPwnedPassword:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#37 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/FlarumPromotionHeader.php:29
#36 Flarum\Http\Middleware\FlarumPromotionHeader:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#35 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/ShareErrorsFromSession.php:57
#34 Flarum\Http\Middleware\ShareErrorsFromSession:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#33 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php:36
#32 Flarum\Http\Middleware\CheckCsrfToken:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#31 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php:67
#30 Flarum\Http\Middleware\ResolveRoute:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#29 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/SetLocale.php:50
#28 Flarum\Http\Middleware\SetLocale:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#27 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php:32
#26 Flarum\Http\Middleware\AuthenticateWithSession:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#25 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php:52
#24 Flarum\Http\Middleware\RememberFromCookie:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#23 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/StartSession.php:61
#22 Flarum\Http\Middleware\StartSession:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#21 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/CollectGarbage.php:46
#20 Flarum\Http\Middleware\CollectGarbage:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#19 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php:28
#18 Flarum\Http\Middleware\ParseJsonBody:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#17 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/HandleErrors.php:57
#16 Flarum\Http\Middleware\HandleErrors:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#15 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php:84
#14 Laminas\Stratigility\MiddlewarePipe:process in /var/www/flarum/vendor/middlewares/request-handler/src/RequestHandler.php:84
#13 Middlewares\RequestHandler:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#12 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/middlewares/base-path-router/src/BasePathRouter.php:101
#11 Middlewares\BasePathRouter:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#10 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php:42
#9 Laminas\Stratigility\Middleware\OriginalMessages:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#8 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/middlewares/base-path/src/BasePath.php:73
#7 Middlewares\BasePath:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#6 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/flarum/core/src/Http/Middleware/ProcessIp.php:24
#5 Flarum\Http\Middleware\ProcessIp:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/Next.php:61
#4 Laminas\Stratigility\Next:handle in /var/www/flarum/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php:84
#3 Laminas\Stratigility\MiddlewarePipe:process in /var/www/flarum/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php:73
#2 Laminas\Stratigility\MiddlewarePipe:handle in /var/www/flarum/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php:96
#1 Laminas\HttpHandlerRunner\RequestHandlerRunner:run in /var/www/flarum/vendor/flarum/core/src/Http/Server.php:44
#0 Flarum\Http\Server:listen in /var/www/flarum/public/index.php:26

The error message is likely different depending on which of the two extensions is enabled first.

Possible solutions include declaring a namespace (I think the const variables would be scoped to the namespace instead of the global namespace) or using unique names for the const variables.

Yes, I acknowledged the issue

Was reported here to: https://discuss.flarum.org/d/26269-flarum-discussion-views/247

This issue looks bigger than expected

Possible solutions include declaring a namespace

Isn't it already? Or you mean declare a namespace in extend.php

Oops, I never saw the report in the other discussion! I scanned the issues on both repositories but didn't see it.

Or you mean declare a namespace in extend.php

Yes that's what I was thinking of. There's no namespace declared at the top of extend.php, so everything from both extend files is effectively a common namespace. For most extensions not having a namespace in extend.php is not going to create any issue since there is usually nothing declared in that file.

I'm just not sure if const variables can actually be constrained to a namespace or if they would still be declared globally when a namespace is declared.