Justman10000 the-turk/flarum-flamoji apparently declared itself incompatible with my extension (6th line under "problem 1" in the output). You won't be able to install both.

    Justman10000 Composer lists out all possible versions and the reasons why each one had to be skipped. All the early versions had to be skipped because they were for an older Flarum version. The later extension versions have been skipped because of the conflict declaration. In the end, Composer did not find a single version that did not have either of those issues, so it lays out the list for the user to figure out which of the issues is relevant.

    If you use require with ^1.0 instead of * it should not try all of the older versions and you would not see that part of the output. That's one of the benefits and "downsides" of the * requirement, it actually makes Composer try to install any of the possible version, so for older extensions with many releases over the years Composer has to compute the dependencies of every single one. I'm pretty sure it starts with the most recent one and if it fits the other computations will be skipped, so in practice I don't think it takes much more processing to run. But you get that longer output if an error occurs.

    I hope that makes sense. That's all Composer logic, not specific to Flarum or the concept of extensions.

      Justman10000 there's no universal rule, we actually recommended * and that's what FriendsOfFlarum uses in its README files, as do many other developers.

      In practice, if an extension only has 1.x releases, then ^1.0 or * will have the same effect. The technical difference is with major versions.

      Personally I prefer ^ because I follow the semver convention for my extension releases and if there's a new major version I would prefer it does not automatically or accidentally updates during Composer operations if the admin has not read the release changelog in advance. Then the admin can manually adjust the new major version when they are ready to update.

        clarkwinkelmann Personally I prefer ^ because I follow the semver convention for my extension releases and if there's a new major version I would prefer it does not automatically or accidentally updates during Composer operations if the admin has not read the release changelog in advance. Then the admin can manually adjust the new major version when they are ready to update.

        Like mine?

        2 months later

        PikaPower please provide more details.

        What is visible in your screenshot is Flarum's built in emoji picker, not the one from my extension.

        My extension picker is only accessible though the button on the post edit toolbar. There is no keyboard shortcut.

        If you have an issue with the Flarum built-in extension please start a new support discussion.

        7 months later
        5 months later

        Unfortunately the enabling of the plugin kills flarum here:
        PHP ERROR:

        Warning: Undefined array key "data" in /var/www/html/vendor/flarum/core/src/Frontend/Content/CorePayload.php on line 57

        Fatal error: Uncaught Laminas\HttpHandlerRunner\Exception\EmitterException: Output has been emitted previously; cannot emit response in /var/www/html/vendor/laminas/laminas-httphandlerrunner/src/Exception/EmitterException.php:20 Stack trace: #0 /var/www/html/vendor/laminas/laminas-httphandlerrunner/src/Emitter/SapiEmitterTrait.php(42): Laminas\HttpHandlerRunner\Exception\EmitterException::forOutputSent() #1 /var/www/html/vendor/laminas/laminas-httphandlerrunner/src/Emitter/SapiEmitter.php(21): Laminas\HttpHandlerRunner\Emitter\SapiEmitter->assertNoPreviousOutput() #2 /var/www/html/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php(75): Laminas\HttpHandlerRunner\Emitter\SapiEmitter->emit() #3 /var/www/html/vendor/flarum/core/src/Http/Server.php(45): Laminas\HttpHandlerRunner\RequestHandlerRunner->run() #4 /var/www/html/public/index.php(26): Flarum\Http\Server->listen() #5 {main} thrown in /var/www/html/vendor/laminas/laminas-httphandlerrunner/src/Exception/EmitterException.php on line 20

        LOGS:

        Next Illuminate\Contracts\Container\BindingResolutionException: Target class [ClarkWinkelmann\EmojioneArea\ForumAttributes] does not exist. in /var/www/html/vendor/illuminate/container/Container.php:879
        Stack trace:
        #0 /var/www/html/vendor/illuminate/container/Container.php(758): Illuminate\Container\Container->build()
        #1 /var/www/html/vendor/illuminate/container/Container.php(694): Illuminate\Container\Container->resolve()
        #2 /var/www/html/vendor/flarum/core/src/Foundation/ContainerUtil.php(28): Illuminate\Container\Container->make()
        #3 /var/www/html/vendor/flarum/core/src/Api/Serializer/AbstractSerializer.php(95): Flarum\Foundation\ContainerUtil::Flarum\Foundation{closure}()
        #4 /var/www/html/vendor/sycho/json-api/src/Resource.php(183): Flarum\Api\Serializer\AbstractSerializer->getAttributes()
        #5 /var/www/html/vendor/sycho/json-api/src/Resource.php(81): Tobscure\JsonApi\Resource->getAttributes()
        #6 /var/www/html/vendor/sycho/json-api/src/Document.php(188): Tobscure\JsonApi\Resource->toArray()
        #7 /var/www/html/vendor/sycho/json-api/src/Document.php(232): Tobscure\JsonApi\Document->toArray()
        #8 /var/www/html/vendor/flarum/core/src/Api/JsonApiResponse.php(27): Tobscure\JsonApi\Document->jsonSerialize()
        #9 /var/www/html/vendor/flarum/core/src/Api/Controller/AbstractSerializeController.php(139): Flarum\Api\JsonApiResponse->__construct()
        #10 /var/www/html/vendor/flarum/core/src/Http/RouteHandlerFactory.php(41): Flarum\Api\Controller\AbstractSerializeController->handle()
        #11 /var/www/html/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php(27): Flarum\Http\RouteHandlerFactory->Flarum\Http{closure}()
        #12 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ExecuteRoute->process()
        #13 /var/www/html/vendor/fof/oauth/src/Middleware/BindRequest.php(33): Laminas\Stratigility\Next->handle()
        #14 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): FoF\OAuth\Middleware\BindRequest->process()
        #15 /var/www/html/vendor/flarum/core/src/Api/Middleware/ThrottleApi.php(33): Laminas\Stratigility\Next->handle()
        #16 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Api\Middleware\ThrottleApi->process()
        #17 /var/www/html/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php(69): Laminas\Stratigility\Next->handle()
        #18 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ResolveRoute->process()
        #19 /var/www/html/vendor/flarum/core/src/Http/Middleware/SetLocale.php(51): Laminas\Stratigility\Next->handle()
        #20 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\SetLocale->process()
        #21 /var/www/html/vendor/flarum/core/src/Http/Middleware/HandleErrors.php(57): Laminas\Stratigility\Next->handle()
        #22 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\HandleErrors->process()
        #23 /var/www/html/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle()
        #24 /var/www/html/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(66): Laminas\Stratigility\MiddlewarePipe->process()
        #25 /var/www/html/vendor/flarum/core/src/Api/Client.php(141): Laminas\Stratigility\MiddlewarePipe->handle()
        #26 /var/www/html/vendor/flarum/core/src/Api/Client.php(91): Flarum\Api\Client->send()
        #27 /var/www/html/vendor/flarum/core/src/Frontend/Frontend.php(69): Flarum\Api\Client->get()
        #28 /var/www/html/vendor/flarum/core/src/Frontend/Frontend.php(50): Flarum\Frontend\Frontend->getForumDocument()
        #29 /var/www/html/vendor/flarum/core/src/Frontend/Controller.php(32): Flarum\Frontend\Frontend->document()
        #30 /var/www/html/vendor/flarum/core/src/Http/RouteHandlerFactory.php(41): Flarum\Frontend\Controller->handle()
        #31 /var/www/html/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php(27): Flarum\Http\RouteHandlerFactory->Flarum\Http{closure}()
        #32 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ExecuteRoute->process()
        #33 /var/www/html/vendor/fof/oauth/src/Middleware/BindRequest.php(33): Laminas\Stratigility\Next->handle()
        #34 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): FoF\OAuth\Middleware\BindRequest->process()
        #35 /var/www/html/vendor/fof/oauth/src/Middleware/ErrorHandler.php(58): Laminas\Stratigility\Next->handle()
        #36 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): FoF\OAuth\Middleware\ErrorHandler->process()
        #37 /var/www/html/vendor/flarum/core/src/Http/Middleware/ContentTypeOptionsHeader.php(21): Laminas\Stratigility\Next->handle()
        #38 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ContentTypeOptionsHeader->process()
        #39 /var/www/html/vendor/flarum/core/src/Http/Middleware/ReferrerPolicyHeader.php(30): Laminas\Stratigility\Next->handle()
        #40 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ReferrerPolicyHeader->process()
        #41 /var/www/html/vendor/flarum/core/src/Http/Middleware/FlarumPromotionHeader.php(30): Laminas\Stratigility\Next->handle()
        #42 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\FlarumPromotionHeader->process()
        #43 /var/www/html/vendor/flarum/core/src/Http/Middleware/ShareErrorsFromSession.php(57): Laminas\Stratigility\Next->handle()
        #44 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ShareErrorsFromSession->process()
        #45 /var/www/html/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php(36): Laminas\Stratigility\Next->handle()
        #46 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\CheckCsrfToken->process()
        #47 /var/www/html/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php(69): Laminas\Stratigility\Next->handle()
        #48 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ResolveRoute->process()
        #49 /var/www/html/vendor/flarum/core/src/Http/Middleware/SetLocale.php(51): Laminas\Stratigility\Next->handle()
        #50 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\SetLocale->process()
        #51 /var/www/html/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php(31): Laminas\Stratigility\Next->handle()
        #52 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\AuthenticateWithSession->process()
        #53 /var/www/html/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php(52): Laminas\Stratigility\Next->handle()
        #54 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\RememberFromCookie->process()
        #55 /var/www/html/vendor/flarum/core/src/Http/Middleware/StartSession.php(61): Laminas\Stratigility\Next->handle()
        #56 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\StartSession->process()
        #57 /var/www/html/vendor/flarum/core/src/Http/Middleware/CollectGarbage.php(46): Laminas\Stratigility\Next->handle()
        #58 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\CollectGarbage->process()
        #59 /var/www/html/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php(28): Laminas\Stratigility\Next->handle()
        #60 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ParseJsonBody->process()
        #61 /var/www/html/vendor/flarum/core/src/Http/Middleware/HandleErrors.php(57): Laminas\Stratigility\Next->handle()
        #62 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\HandleErrors->process()
        #63 /var/www/html/vendor/flarum/core/src/Http/Middleware/InjectActorReference.php(25): Laminas\Stratigility\Next->handle()
        #64 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\InjectActorReference->process()
        #65 /var/www/html/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle()
        #66 /var/www/html/vendor/middlewares/request-handler/src/RequestHandler.php(84): Laminas\Stratigility\MiddlewarePipe->process()
        #67 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Middlewares\RequestHandler->process()
        #68 /var/www/html/vendor/middlewares/base-path-router/src/BasePathRouter.php(99): Laminas\Stratigility\Next->handle()
        #69 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Middlewares\BasePathRouter->process()
        #70 /var/www/html/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php(36): Laminas\Stratigility\Next->handle()
        #71 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\Middleware\OriginalMessages->process()
        #72 /var/www/html/vendor/middlewares/base-path/src/BasePath.php(73): Laminas\Stratigility\Next->handle()
        #73 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Middlewares\BasePath->process()
        #74 /var/www/html/vendor/flarum/core/src/Http/Middleware/ProcessIp.php(24): Laminas\Stratigility\Next->handle()
        #75 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ProcessIp->process()
        #76 /var/www/html/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle()
        #77 /var/www/html/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(66): Laminas\Stratigility\MiddlewarePipe->process()
        #78 /var/www/html/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php(73): Laminas\Stratigility\MiddlewarePipe->handle()
        #79 /var/www/html/vendor/flarum/core/src/Http/Server.php(45): Laminas\HttpHandlerRunner\RequestHandlerRunner->run()
        #80 /var/www/html/public/index.php(26): Flarum\Http\Server->listen()
        #81 {main}

        Version info:

        Flarum core: 1.8.5
        PHP version: 8.3.6
        MySQL version: 10.11.8-MariaDB-0ubuntu0.24.04.1
        Loaded extensions: Core, date, libxml, openssl, pcre, zlib, filter, hash, json, pcntl, random, Reflection, SPL, session, standard, sodium, mysqlnd, PDO, xml, calendar, ctype, curl, dom, mbstring, FFI, fileinfo, ftp, gd, gettext, iconv, exif, mysqli, pdo_mysql, Phar, posix, readline, shmop, SimpleXML, sockets, sysvmsg, sysvsem, sysvshm, tokenizer, xmlreader, xmlwriter, xsl, zip, Zend OPcache
        +-----------------------------+---------+--------+
        | Flarum Extensions | | |
        +-----------------------------+---------+--------+
        | ID | Version | Commit |
        +-----------------------------+---------+--------+
        | flarum-flags | v1.8.0 | |
        | flarum-tags | v1.8.1 | |
        | flarum-approval | v1.8.1 | |
        | flarum-markdown | v1.8.0 | |
        | flarum-suspend | v1.8.1 | |
        | fof-oauth | 1.6.11 | |
        | flarum-mentions | v1.8.3 | |
        | flarum-subscriptions | v1.8.0 | |
        | v17development-seo | v1.8.1 | |
        | therealsujitk-gifs | v4.1.1 | |
        | fof-user-directory | 1.3.3 | |
        | fof-recaptcha | 1.3.4 | |
        | fof-polls | 2.2.4 | |
        | fof-pages | 1.0.8 | |
        | fof-nightmode | 1.5.3 | |
        | fof-links | 1.2.3 | |
        | fof-forum-statistics-widget | 1.2.1 | |
        | fof-formatting | 1.0.3 | |
        | fof-follow-tags | 1.2.6 | |
        | flarum-sticky | v1.8.0 | |
        | flarum-statistics | v1.8.0 | |
        | flarum-pusher | v1.8.0 | |
        | flarum-lock | v1.8.0 | |
        | flarum-likes | v1.8.0 | |
        | flarum-lang-english | v1.8.0 | |
        | flarum-lang-dutch | v1.2.1 | |
        | flarum-extension-manager | v1.0.3 | |
        | flarum-emoji | v1.8.0 | |
        | flarum-bbcode | v1.8.0 | |
        +-----------------------------+---------+--------+
        Base URL: *
        Installation path: /var/www/html
        Queue driver: sync
        Session driver: file
        Mail driver: smtp
        Debug mode: off

          5 months later

          Version 1.1.0

          • Fix behavior when clicking toolbar while picker is open
          • New setting to close picker after emoji selection
          • Translatable category names
          • Removed non-English translations from extension, responsibility moved to language packs
          • Use standard toolbar button now that it's no longer buggy
          • Update dependencies, move to Webpack 5
          • Use default setting extender introduced in Flarum 1.2

          Thanks @gianniguida for your contribution on GitHub.

          This new version requires Flarum 1.2+ and PHP7.4+

          It was completely random that I worked on this update today, but it happens to be exactly 8 years since I created this extension on January 30, 2017. My first ever Flarum extension, for Flarum beta 6!

          Unfortunately there is still no way to use EmojiOneArea with an alternative set of emojis, so it cannot be made to display Twemoji, the emoji set Flarum switched to after I created the extension.

            clarkwinkelmann

            I can't update this extension.... It says there's nothing....

            My forum is up to date. PHP is 8.1. I don't understand?

              Wlork try composer why-not clarkwinkelmann/flarum-ext-emojionearea:1.1.0 to get an explanation message.

              Perhaps you locked the version too tight. Try the require command again instead of the update command.

                What are the technical difficulties of using the Twemoji pack instead?

                  CyberGene infinite. It'll be less work to re-create the picker from scratch. Only the pre-made categories lists could be re-used.

                  The EmojiOne javascript library is at the core of the jQuery plugin, so even hacking the CDN image paths might not work properly for all emojis if there are any differences in the way the files were structured. And if that works, you end up with a solution that loads 3 times as much javascript as necessary.

                  This extension really became less and less relevant as time goes on. The reason I used EmojiOneArea in 2017 was not only that it was an EmojiOne picker, but it supported shortcode insertion, which was how Flarum inserted emojis in posts. Since then EmojiOne was dropped, and so were shortcodes. So there's really not much point anymore. The jQuery plugin isn't even all that well done, it has many missing features like intelligent positioning to fit within browser edges.

                  I completely abandoned my goal to create a native emoji picker when the other community extension that does exactly that was released. I have never looked at their code and I don't know if it really became incompatible, but any effort would probably be best spent on that other extension.

                  The reason I keep updating this extension is mostly for historical reasons, as it has a special place in my heart. It's also a good example for using a jQuery-based library inside Flarum.

                  • Edited

                  clarkwinkelmann

                  Pour explanation message, i have :

                  Not enough arguments (missing: "version").

                  I test require and update command, same result. And there is a message :

                  Cannot use clarkwinkelmann/flarum-ext-emojionearea's latest version 1.1.0 as it requires php ^7.4 which is not satisfied by your platform.

                  My PHP is 8.1. So.... ?

                    Wlork your PHP command line version might be different (php -v) or you have a hard-coded platform in your composer.json.