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.