in2code-de / publications

Follower of EXT:bib to show publications in TYPO3. Im- and export of bibtext and xml files.

Home Page:https://www.in2code.de/agentur/typo3-extensions/publications/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Type error when trying to import a BIB-file

wowaTYPO3 opened this issue · comments

In a customer project the customer wants to import a BIB file. Immediately after starting the import, the process aborts with the following error.
I have added the BIB file for test purposes.
I'm not at all familiar with this file format, so I don't know whether it might not be the file itself. But the customer probably tested several settings when creating the file and the error appeared with every file.

TYPO3 9.5.22
publications 1.17.0
PHP 7.3.17
savedrecs.bib.zip

Whoops, looks like something went wrong.
(1/1) TypeError
Argument 2 passed to In2code\Publications\Service\ImportService::getPublicationByIdentifier() must be of the type string, null given, called in /var/www/html/public/typo3conf/ext/publications/Classes/Service/ImportService.php on line 212

in /var/www/html/public/typo3conf/ext/publications/Classes/Service/ImportService.php line 367
     * @param int $pid
     * @param string $title
     * @return array
     */
    protected function getPublicationByIdentifier(int $pid, string $title): array
    {
        $queryBuilder = DatabaseUtility::getQueryBuilderForTable(Publication::TABLE_NAME);
        $publication = $queryBuilder->select('*')->from(Publication::TABLE_NAME)->where(
            $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($pid, \PDO::PARAM_INT)),
at In2code\Publications\Service\ImportService->getPublicationByIdentifier(46, null)
in /var/www/html/public/typo3conf/ext/publications/Classes/Service/ImportService.php line 212
        $record = array_merge_recursive($record, $this->getAdditionalTypo3Fields());

        $currentPublication = $this->getPublicationByIdentifier(
            $this->storagePid,
            $record['title']
        );

        if (!empty($currentPublication)) {
            $publicationUid = $this->updatePublication($record);
at In2code\Publications\Service\ImportService->addOrUpdatePublication(array('citeid' => 'ISI:000515710800004', 'doi' => '{10.1103/PhysRevApplied.13.024068}', 'issn' => '{2331-7019}', 'bibtype' => 'article', 'tstamp' => 1602752585, 'crdate' => 1602752585, 'cruser_id' => 18, 'pid' => 46))
in /var/www/html/public/typo3conf/ext/publications/Classes/Service/ImportService.php line 71
    public function import()
    {
        foreach ($this->publicationsToImport as $rawPublication) {
            $publicationUid = $this->addOrUpdatePublication(
                $this->cleanupRawPublicationArray($rawPublication)
            );

            if (!empty($rawPublication['authors'])) {
                $authors = $this->addAuthors($rawPublication['authors']);
at In2code\Publications\Service\ImportService->import()
in /var/www/html/public/typo3conf/ext/publications/Classes/Controller/ImportController.php line 47
            ImportService::class,
            $file['tmp_name'],
            $this->objectManager->get($importer)
        );
        $importService->import();
        $this->view->assignMultiple(
            [
                'import' => $importService
            ]
at In2code\Publications\Controller\ImportController->importAction(array('name' => 'savedrecs.bib', 'type' => 'application/octet-stream', 'tmp_name' => '/tmp/phpeMytuC', 'error' => 0, 'size' => 7320), 'In2code\\Publications\\Import\\Importer\\BibImporter')
in /var/www/html/public/typo3/sysext/extbase/Classes/Mvc/Controller/ActionController.php line 318
        }
        $validationResult = $this->arguments->validate();
        if (!$validationResult->hasErrors()) {
            $this->emitBeforeCallActionMethodSignal($preparedArguments);
            $actionResult = $this->{$this->actionMethodName}(...$preparedArguments);
        } else {
            $actionResult = $this->{$this->errorMethodName}();
        }

at TYPO3\CMS\Extbase\Mvc\Controller\ActionController->callActionMethod()
in /var/www/html/public/typo3/sysext/extbase/Classes/Mvc/Controller/ActionController.php line 167
        $this->view = $this->resolveView();
        if ($this->view !== null) {
            $this->initializeView($this->view);
        }
        $this->callActionMethod();
        $this->renderAssetsForRequest($request);
    }

    /**
at TYPO3\CMS\Extbase\Mvc\Controller\ActionController->processRequest(object(TYPO3\CMS\Extbase\Mvc\Web\Request), object(TYPO3\CMS\Extbase\Mvc\Web\Response))
in /var/www/html/public/typo3/sysext/extbase/Classes/Mvc/Dispatcher.php line 73
                throw new \TYPO3\CMS\Extbase\Mvc\Exception\InfiniteLoopException('Could not ultimately dispatch the request after ' . $dispatchLoopCount . ' iterations. Most probably, a @' . \TYPO3\CMS\Extbase\Annotation\IgnoreValidation::class . ' annotation is missing on re-displaying a form with validation errors.', 1217839467);
            }
            $controller = $this->resolveController($request);
            try {
                $controller->processRequest($request, $response);
            } catch (\TYPO3\CMS\Extbase\Mvc\Exception\StopActionException $ignoredException) {
            }
        }
        $this->emitAfterRequestDispatchSignal($request, $response);
at TYPO3\CMS\Extbase\Mvc\Dispatcher->dispatch(object(TYPO3\CMS\Extbase\Mvc\Web\Request), object(TYPO3\CMS\Extbase\Mvc\Web\Response))
in /var/www/html/public/typo3/sysext/extbase/Classes/Mvc/Web/BackendRequestHandler.php line 35
    {
        $request = $this->requestBuilder->build();
        /** @var \TYPO3\CMS\Extbase\Mvc\ResponseInterface $response */
        $response = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Web\Response::class);
        $this->dispatcher->dispatch($request, $response);
        return $response;
    }

    /**
at TYPO3\CMS\Extbase\Mvc\Web\BackendRequestHandler->handleRequest()
in /var/www/html/public/typo3/sysext/extbase/Classes/Core/Bootstrap.php line 217
        /** @var \TYPO3\CMS\Extbase\Mvc\RequestHandlerResolver $requestHandlerResolver */
        $requestHandlerResolver = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\RequestHandlerResolver::class);
        $requestHandler = $requestHandlerResolver->resolveRequestHandler();
        /** @var WebResponse $extbaseResponse */
        $extbaseResponse = $requestHandler->handleRequest();

        // Convert to PSR-7 response and hand it back to TYPO3 Core
        $response = $this->convertExtbaseResponseToPsr7Response($extbaseResponse);
        $this->resetSingletons();
at TYPO3\CMS\Extbase\Core\Bootstrap->handleBackendRequest(object(TYPO3\CMS\Core\Http\ServerRequest))
at call_user_func_array(array(object(TYPO3\CMS\Extbase\Core\Bootstrap), 'handleBackendRequest'), array(object(TYPO3\CMS\Core\Http\ServerRequest)))
in /var/www/html/public/typo3/sysext/backend/Classes/Http/RouteDispatcher.php line 93
                $arguments[] = $response;
            }
        }

        return call_user_func_array($target, $arguments);
    }

    /**
     * Wrapper method for static form protection utility
at TYPO3\CMS\Backend\Http\RouteDispatcher->dispatch(object(TYPO3\CMS\Core\Http\ServerRequest), object(TYPO3\CMS\Core\Http\Response))
in /var/www/html/public/typo3/sysext/backend/Classes/Http/RequestHandler.php line 73
        }
        try {
            // Check if the router has the available route and dispatch.
            $dispatcher = GeneralUtility::makeInstance(RouteDispatcher::class);
            return $dispatcher->dispatch($request, $response);
        } catch (InvalidRequestTokenException $e) {
            // When token was invalid redirect to login
            $url = GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . TYPO3_mainDir;
            return new RedirectResponse($url);
at TYPO3\CMS\Backend\Http\RequestHandler->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/backend/Classes/Middleware/SiteResolver.php line 59
            $site = GeneralUtility::makeInstance(SiteMatcher::class)->matchByPageId($pageId, $rootLine);
            $request = $request->withAttribute('site', $site);
            $GLOBALS['TYPO3_REQUEST'] = $request;
        }
        return $handler->handle($request);
    }
}
at TYPO3\CMS\Backend\Middleware\SiteResolver->process(object(TYPO3\CMS\Core\Http\ServerRequest), object(TYPO3\CMS\Backend\Http\RequestHandler))
in /var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 138

                if (!$middleware instanceof MiddlewareInterface) {
                    throw new \InvalidArgumentException(get_class($middleware) . ' does not implement ' . MiddlewareInterface::class, 1516821342);
                }
                return $middleware->process($request, $this->next);
            }
        };
    }
}
at class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/backend/Classes/Middleware/AdditionalResponseHeaders.php line 39
     * @return ResponseInterface
     */
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $response = $handler->handle($request);
        foreach ($GLOBALS['TYPO3_CONF_VARS']['BE']['HTTP']['Response']['Headers'] ?? [] as $header) {
            [$headerName, $value] = explode(':', $header, 2);
            $response = $response->withAddedHeader($headerName, trim($value));
        }
at TYPO3\CMS\Backend\Middleware\AdditionalResponseHeaders->process(object(TYPO3\CMS\Core\Http\ServerRequest), object(class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056))
in /var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 138

                if (!$middleware instanceof MiddlewareInterface) {
                    throw new \InvalidArgumentException(get_class($middleware) . ' does not implement ' . MiddlewareInterface::class, 1516821342);
                }
                return $middleware->process($request, $this->next);
            }
        };
    }
}
at class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/backend/Classes/Middleware/OutputCompression.php line 45
        ob_clean();
        // Initialize output compression if configured
        $this->initializeOutputCompression();

        return $handler->handle($request);
    }

    /**
     * Initialize output compression if configured
at TYPO3\CMS\Backend\Middleware\OutputCompression->process(object(TYPO3\CMS\Core\Http\ServerRequest), object(class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056))
in /var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 138

                if (!$middleware instanceof MiddlewareInterface) {
                    throw new \InvalidArgumentException(get_class($middleware) . ' does not implement ' . MiddlewareInterface::class, 1516821342);
                }
                return $middleware->process($request, $this->next);
            }
        };
    }
}
at class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/backend/Classes/Middleware/LegacyBackendTemplateInitialization.php line 42
     */
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $GLOBALS['TBE_TEMPLATE'] = GeneralUtility::makeInstance(DocumentTemplate::class);
        return $handler->handle($request);
    }
}
at TYPO3\CMS\Backend\Middleware\LegacyBackendTemplateInitialization->process(object(TYPO3\CMS\Core\Http\ServerRequest), object(class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056))
in /var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 138

                if (!$middleware instanceof MiddlewareInterface) {
                    throw new \InvalidArgumentException(get_class($middleware) . ' does not implement ' . MiddlewareInterface::class, 1516821342);
                }
                return $middleware->process($request, $this->next);
            }
        };
    }
}
at class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/backend/Classes/Middleware/BackendUserAuthenticator.php line 70
        Bootstrap::initializeLanguageObject();
        // Register the backend user as aspect
        $this->setBackendUserAspect(GeneralUtility::makeInstance(Context::class), $GLOBALS['BE_USER']);

        return $handler->handle($request);
    }

    /**
     * Check if the user is required for the request
at TYPO3\CMS\Backend\Middleware\BackendUserAuthenticator->process(object(TYPO3\CMS\Core\Http\ServerRequest), object(class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056))
in /var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 138

                if (!$middleware instanceof MiddlewareInterface) {
                    throw new \InvalidArgumentException(get_class($middleware) . ' does not implement ' . MiddlewareInterface::class, 1516821342);
                }
                return $middleware->process($request, $this->next);
            }
        };
    }
}
at class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/backend/Classes/Middleware/BackendRouteInitialization.php line 73

        // Add the route path to the request
        $request = $request->withAttribute('routePath', $pathToRoute);

        return $handler->handle($request);
    }
}
at TYPO3\CMS\Backend\Middleware\BackendRouteInitialization->process(object(TYPO3\CMS\Core\Http\ServerRequest), object(class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056))
in /var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 138

                if (!$middleware instanceof MiddlewareInterface) {
                    throw new \InvalidArgumentException(get_class($middleware) . ' does not implement ' . MiddlewareInterface::class, 1516821342);
                }
                return $middleware->process($request, $this->next);
            }
        };
    }
}
at class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/backend/Classes/Middleware/ForcedHttpsBackendRedirector.php line 53
            list($server, $address) = explode('/', $url, 2);
            return new RedirectResponse('https://' . $server . $sslPortSuffix . '/' . $address);
        }

        return $handler->handle($request);
    }
}
at TYPO3\CMS\Backend\Middleware\ForcedHttpsBackendRedirector->process(object(TYPO3\CMS\Core\Http\ServerRequest), object(class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056))
in /var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 138

                if (!$middleware instanceof MiddlewareInterface) {
                    throw new \InvalidArgumentException(get_class($middleware) . ' does not implement ' . MiddlewareInterface::class, 1516821342);
                }
                return $middleware->process($request, $this->next);
            }
        };
    }
}
at class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/backend/Classes/Middleware/LockedBackendGuard.php line 71
            $request->getAttribute('normalizedParams')->getRemoteAddress(),
            trim((string)$GLOBALS['TYPO3_CONF_VARS']['BE']['IPmaskList'])
        );

        return $handler->handle($request);
    }

    /**
     * Check adminOnly configuration variable and redirects to an URL in file typo3conf/LOCK_BACKEND
at TYPO3\CMS\Backend\Middleware\LockedBackendGuard->process(object(TYPO3\CMS\Core\Http\ServerRequest), object(class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056))
in /var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 138

                if (!$middleware instanceof MiddlewareInterface) {
                    throw new \InvalidArgumentException(get_class($middleware) . ' does not implement ' . MiddlewareInterface::class, 1516821342);
                }
                return $middleware->process($request, $this->next);
            }
        };
    }
}
at class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/core/Classes/Middleware/NormalizedParamsAttribute.php line 58
        // refactored to have ServerRequest object available where it is needed. This global will be
        // deprecated then and removed.
        $GLOBALS['TYPO3_REQUEST'] = $request;

        return $handler->handle($request);
    }
}
at TYPO3\CMS\Core\Middleware\NormalizedParamsAttribute->process(object(TYPO3\CMS\Core\Http\ServerRequest), object(class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056))
in /var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 138

                if (!$middleware instanceof MiddlewareInterface) {
                    throw new \InvalidArgumentException(get_class($middleware) . ' does not implement ' . MiddlewareInterface::class, 1516821342);
                }
                return $middleware->process($request, $this->next);
            }
        };
    }
}
at class@anonymous/var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php0x7f961e926056->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 67
     * @return ResponseInterface
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        return $this->tip->handle($request);
    }

    /**
     * Seed the middleware stack with the inner request handler
at TYPO3\CMS\Core\Http\MiddlewareDispatcher->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/core/Classes/Http/AbstractApplication.php line 108
    {
        $requestHandler = GeneralUtility::makeInstance($this->requestHandler);
        $dispatcher = $this->createMiddlewareDispatcher($requestHandler);

        return $dispatcher->handle($request);
    }

    /**
     * Set up the application and shut it down afterwards
at TYPO3\CMS\Core\Http\AbstractApplication->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/backend/Classes/Http/Application.php line 68
            return $this->installToolRedirect();
        }
        // Set up the initial context
        $this->initializeContext();
        return parent::handle($request);
    }

    /**
     * Check if LocalConfiguration.php and PackageStates.php exist
at TYPO3\CMS\Backend\Http\Application->handle(object(TYPO3\CMS\Core\Http\ServerRequest))
in /var/www/html/public/typo3/sysext/core/Classes/Http/AbstractApplication.php line 120
    final public function run(callable $execute = null)
    {
        try {
            $response = $this->handle(
                \TYPO3\CMS\Core\Http\ServerRequestFactory::fromGlobals()
            );
            if ($execute !== null) {
                call_user_func($execute);
            }
at TYPO3\CMS\Core\Http\AbstractApplication->run()
in /var/www/html/public/typo3/index.php line 24
// Set up the application for the backend
call_user_func(function () {
    $classLoader = require dirname(dirname(__DIR__)).'/vendor/autoload.php';
    \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::run(1, \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_BE);
    \TYPO3\CMS\Core\Core\Bootstrap::init($classLoader)->get(\TYPO3\CMS\Backend\Http\Application::class)->run();
});
at {closure}()
in /var/www/html/public/typo3/index.php line 25
call_user_func(function () {
    $classLoader = require dirname(dirname(__DIR__)).'/vendor/autoload.php';
    \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::run(1, \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_BE);
    \TYPO3\CMS\Core\Core\Bootstrap::init($classLoader)->get(\TYPO3\CMS\Backend\Http\Application::class)->run();
});

The bib-format is a very free format on the one hand but on the other hand a lot of extension possibilities make it nearly impossible to use those files over a lot of systems (Email from Sonja here: "...wo der bibtex Dialekt etwas anders aufgebaut ist"). In this case you or someone has to write an own importer.
How to write individual importers: https://github.com/in2code-de/publications/blob/develop/Documentation/Importer.md