statamic / cms

The core Laravel CMS Composer package
https://statamic.com
Other
3.7k stars 508 forks source link

Replicator/Bard is broken #404

Closed sauerbraten closed 5 years ago

sauerbraten commented 5 years ago

Since 65df67d275f831493eaeede45d061539b2fb9fd4, loading a page with a Bard field on it throws an exception:

ErrorException thrown with message "Illegal string offset 'type'" ``` Stacktrace: #80 ErrorException in /var/www/core/app/Fields/Fieldtypes/Replicator.php:86 #79 Illuminate\Foundation\Bootstrap\HandleExceptions:handleError in /var/www/core/app/Fields/Fieldtypes/Replicator.php:86 #78 Statamic\Fields\Fieldtypes\Replicator:Statamic\Fields\Fieldtypes\{closure} in [internal]:0 #77 array_map in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Support/Collection.php:1120 #76 Illuminate\Support\Collection:map in /var/www/core/app/Fields/Fieldtypes/Replicator.php:88 #75 Statamic\Fields\Fieldtypes\Replicator:preload in /var/www/core/app/Fields/Field.php:212 #74 Statamic\Fields\Field:meta in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php:60 #73 Illuminate\Support\HigherOrderCollectionProxy:Illuminate\Support\{closure} in [internal]:0 #72 array_map in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Support/Collection.php:1120 #71 Illuminate\Support\Collection:map in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php:61 #70 Illuminate\Support\HigherOrderCollectionProxy:__call in /var/www/core/app/Fields/Fields.php:174 #69 Statamic\Fields\Fields:meta in /var/www/core/app/Http/Controllers/CP/Collections/EntriesController.php:232 #68 Statamic\Http\Controllers\CP\Collections\EntriesController:create in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54 #67 call_user_func_array in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54 #66 Illuminate\Routing\Controller:callAction in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45 #65 Illuminate\Routing\ControllerDispatcher:dispatch in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Route.php:219 #64 Illuminate\Routing\Route:runController in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Route.php:176 #63 Illuminate\Routing\Route:run in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Router.php:680 #62 Illuminate\Routing\Router:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30 #61 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php:45 #60 Illuminate\Auth\Middleware\Authorize:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #59 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #58 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/core/app/Http/Middleware/CP/Authenticate.php:44 #57 Statamic\Http\Middleware\CP\Authenticate:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #56 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #55 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41 #54 Illuminate\Routing\Middleware\SubstituteBindings:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #53 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #52 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:75 #51 Illuminate\Foundation\Http\Middleware\VerifyCsrfToken:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #50 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #49 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49 #48 Illuminate\View\Middleware\ShareErrorsFromSession:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #47 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #46 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:56 #45 Illuminate\Session\Middleware\StartSession:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #44 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #43 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37 #42 Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #41 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #40 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:66 #39 Illuminate\Cookie\Middleware\EncryptCookies:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #38 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #37 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/core/app/StaticCaching/Middleware/Retrieve.php:34 #36 Statamic\StaticCaching\Middleware\Retrieve:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #35 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #34 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:104 #33 Illuminate\Pipeline\Pipeline:then in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Router.php:682 #32 Illuminate\Routing\Router:runRouteWithinStack in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Router.php:657 #31 Illuminate\Routing\Router:runRoute in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Router.php:623 #30 Illuminate\Routing\Router:dispatchToRoute in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Router.php:612 #29 Illuminate\Routing\Router:dispatch in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:176 #28 Illuminate\Foundation\Http\Kernel:Illuminate\Foundation\Http\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30 #27 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/core/app/Http/Middleware/PoweredByHeader.php:19 #26 Statamic\Http\Middleware\PoweredByHeader:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #25 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #24 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/core/app/Http/Middleware/VanityRedirects.php:27 #23 Statamic\Http\Middleware\VanityRedirects:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #22 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #21 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/core/app/Http/Middleware/PermanentRedirects.php:27 #20 Statamic\Http\Middleware\PermanentRedirects:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #19 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #18 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/fideloper/proxy/src/TrustProxies.php:57 #17 Fideloper\Proxy\TrustProxies:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #16 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #15 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21 #14 Illuminate\Foundation\Http\Middleware\TransformsRequest:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #13 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #12 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21 #11 Illuminate\Foundation\Http\Middleware\TransformsRequest:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #10 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #9 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27 #8 Illuminate\Foundation\Http\Middleware\ValidatePostSize:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #7 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #6 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:62 #5 Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode:handle in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #4 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #3 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:104 #2 Illuminate\Pipeline\Pipeline:then in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:151 #1 Illuminate\Foundation\Http\Kernel:sendRequestThroughRouter in /var/www/polygon/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:116 #0 Illuminate\Foundation\Http\Kernel:handle in /var/www/polygon/public/index.php:55 ```

The code where it happens is line 6 of this snippet

    public function preload()
    {
        return [
            'existing' => collect($this->field->value())->map(function ($set) {
                dump($set);
                $config = $this->config("sets.{$set['type']}.fields", []);
                return (new Fields($config))->addValues($set)->meta();
            })->toArray(),
            'new' => collect($this->config('sets'))->map(function ($set, $handle) {
                return (new Fields($set['fields']))->meta();
            })->toArray(),
            'defaults' => collect($this->config('sets'))->map(function ($set) {
                return (new Fields($set['fields']))->all()->map->defaultValue();
            })->all()
        ];
    }

The dump() I added in the line before shows that $sets is an array of objects, for example:

[
    {
        "text": "<p>Mit modifizierter Nahrung gegen Krankheiten: Rund die H\u00e4lfte der Weltbev\u00f6lkerung hat bisweilen t\u00f6dlichen Vitaminmangel, betroffen sind vor allem die Menschen in den Entwicklungsl\u00e4ndern. Abhilfe k\u00f6nnte nach Ansicht von Wissenschaftlern ein gentechnisch ver\u00e4nderter Mais schaffen, der nun von einem Forscherteam um den US-Biochemiker Paul Christou an der Universit\u00e4t Lleida im Nordosten Spaniens entwickelt worden ist.</p>",
        "type": "text"
    },
    {
        "allow_fullscreen": false,
        "caption": ""Goldener Mais": 169 Mal mehr Betacarotin",
        "image": [
            {
                "reference": {
                    "collection": "image",
                    "id": "92fde53b-0001-0005-0000-000001506143"
                }
            }
        ],
        "placement": "left",
        "type": "image"
    },
    {
        "text": "<p>\nDer r\u00f6tlich gef\u00e4rbte "Goldene Mais" enth\u00e4lt 169 Mal mehr Betacarotin als normaler Mais, ein Provitamin, das vom menschlichen Organismus zu Vitamin A umgebaut wird. Nach Angaben der Weltgesundheitsorganisation WHO erblinden j\u00e4hrlich bis zu eine halbe Million Kinder, weil sie zu wenig davon bekommen.</p><p>Die entwickelten Pflanzen enthalten zudem sechsmal mehr Vitamin C und doppelt so viel Fols\u00e4ure als normaler Mais, berichten die Wissenschaftler in der neuesten Ausgabe der " \n<a href="http://www.pnas.org/cgi/doi/10.1073/pnas.0901412106" target="_blank">Proceedings Of The National Academy Of Sciences</a>".</p><p>Die Wissenschaftler hatten in 10 bis 14 Tage alte Maiskeimlinge f\u00fcnf Gene eingeschleust: zwei f\u00fcr die Betacarotin-Produktion, jeweils eines f\u00fcr Fols\u00e4ure und Vitamin C sowie ein Marker-Gen.</p><p>Bereits vor einigen Jahren hatten Forscher einen "Goldenen Reis" entwickelt, der ebenfalls reich an Betacarotin ist. Umweltsch\u00fctzer und Ern\u00e4hrungswissenschaftler kritisierten jedoch, es k\u00f6nnten nicht f\u00fcr alle Mangelerscheinungen passende Pflanzen geschneidert werden. Statt viel Geld in die gentechnische Ver\u00e4nderung einzelner Pflanzen zu investieren, sollten die Menschen in den Entwicklungsl\u00e4ndern besser mit einer ausgewogenen und gesunden Ern\u00e4hrung versorgt werden, so der Tenor. Der "Goldene Mais", der nach Angaben Christous f\u00fcnfmal mehr Betacarotin als der "Goldene Reis" enth\u00e4lt, d\u00fcrfte \u00e4hnliche Kritiken hervorrufen.</p>",
        "type": "text"
    }
]
sauerbraten commented 5 years ago

fixed somewhere between 65df67d275f831493eaeede45d061539b2fb9fd4 and a9a543ae3e2d038773a0425c6677e8a5924e6c22