GithubHelp home page GithubHelp logo

filefill's Introduction

TYPO3 Extension filefill

Latest Stable Version Build Status StyleCI

Find and fetch missing local files from different remotes.

Ever tried to set up a new system as copy from an existing one? Wondered if all the files (in fileadmin) are really needed? Ever run into the problem that a local file was missing?

Filefill fetches missing files from one or multiple remote servers to ensure you have all the files you need for the new system.

Once the configuration is set up, fetching can be triggered by loading a page with missing files in the frontend.

The extension requires the usage of FAL api to fetch missing files. Files are stored directly in the (local) storage folder (e.g. fileadmin). You can re-run filefill at any time by deleting the local files in the storage folder.

Installation

Simply install the extension with Composer or the Extension Manager.

composer require ichhabrecht/filefill

Usage

You need to configure resources for one or more existing file storages.

Prerequisite: Only storages with a "Local filesystem" driver are currently supported.

Resources for file storages can be configured using one of the two following options where the database record configuration is preferred if set. If not set, the TYPO3_CONF_VARS configuration is used.

Database record configuration

  • go to the root of your TYPO3 page tree (id=0)
  • change to the list module (Web -> List on the left side)
  • find the "File Storage" section and edit a record
  • change to the tab "File Fill" and select the enable checkbox
  • define the resource chain that should be used to fetch missing files

TYPO3_CONF_VARS configuration

  • given a file storage with uid 1, the configuration might look like this
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['filefill']['storages'][1] = [
    [
        'identifier' => 'domain',
        'configuration' => 'https://example.com',
    ],
    [
        'identifier' => 'domain',
        'configuration' => 'https://another-example.com',
    ],
    [
        'identifier' => 'sys_domain',
    ],
    [
        'identifier' => 'placeholder',
    ],
    [
        'identifier' => 'imagebuilder',
        'configuration' => [
            'backgroundColor' => '#FFFFFF',
            'textColor' => '#000000',
        ],
    ],
    [
        'identifier' => 'static',
        'configuration' => [
            'path/to/example/file.txt' => 'Hello world!',
            'another' => [
                'path' => [
                    'to' => [
                        'anotherFile.txt' => 'Lorem ipsum',
                        '*.youtube' => 'yiJjpKzCVE4',
                    ],
                    '*' => 'This file was found in /another/path folder.',
                ],
            ],
            '*.vimeo' => '143018597',
            '*' => 'This is some static text for all other files.',
        ],
    ],
];
  • you don't need to configure resources that you don't want to use
  • the ordering in your configuration defines the ordering of processing

Resources

Resources define the places (url / services) where filefill tries to fetch missing files from. You can use multiple resources to build some kind of fallback chain.

Single domain

Fetch missing files from a fixed url.

Configuration:

  • Url: Enter a valid url (incl http/https scheme)

You can use multiple single domains within one resources configuration.

Domain records

Fetch missing files from all available site configurations. Filefill runs through all base and variant urls as long as the file can be fetched or all domains are processed.

Configuration:

  • no configuration required (the checkbox is just a field placeholder)

There is no need for multiple usage. All domains are used by default.

Placeholder.com

Fetch a missing image from the placeholder.com service. This fetches an image with the correct resolution of the original file.

Configuration:

  • no configuration required (the checkbox is just a field placeholder)

There is no need for multiple usage. This resource can be the last one in the chain but can handle image files only.

Image builder

Create an empty image with the correct resolution of the original file. The height and width is added as a text layer.

Configuration:

  • Background color: Enter a valid hex code as background color
  • Text color: Enter a valid hex code as text color

Static file

Ensure missing files will be available. By default, an empty file will be created.

Configuration:

  • You can configure the content of a file by its path or extension

Please use TypoScript syntax for record configuration.

path/to/example/file.txt = Hello world!
another {
    path {
        to {
            anotherFile\.txt = Lorem ipsum
            *\.youtube => yiJjpKzCVE4
        }
        * = This file was found in /another/path folder.
    }
}
*\.vimeo = 143018597
* = This is some static text for all other files.

Additional resources

You can add own resource handlers to fetch files from additional services.

Registration

$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['filefill']['resourceHandler']['identifierName'] = [
    'title' => 'Name of the resource',
    'handler' => \Vendor\Extension\Resource\ResourceHandler::class,
    'config' => [
        'label' => 'Name of the resource',
        'config' => [
            'type' => 'check',
            'default' => 1,
        ],
    ],
];
  • title: name of the resource that is taken as backend (flex) button label
  • handler: name of the class that handels the actual implementation
  • config: TCA configuration for the backend (flex) field

Handler

namespace Vendor\Extension\Resource;
class ResourceHandler implements \IchHabRecht\Filefill\Resource\RemoteResourceInterface
{
    public function hasFile($fileIdentifier, $filePath, FileInterface $fileObject = null)
    {
        return true;
    }

    public function getFile($fileIdentifier, $filePath, FileInterface $fileObject = null)
    {
        return 'file content';
    }
}

The handler needs to implement the interface \IchHabRecht\Filefill\Resource\RemoteResourceInterface and therefore has to add both functions hasFile and getFile.

Debugging

You can enable additional log information by configuring a filefill logger.

$GLOBALS['TYPO3_CONF_VARS']['LOG']['IchHabRecht']['Filefill'] = [
    'writerConfiguration' => [
        \TYPO3\CMS\Core\Log\LogLevel::DEBUG => [
            \TYPO3\CMS\Core\Log\Writer\FileWriter::class => [
                'logFileInfix' => 'filefill',
            ],
        ],
    ],
];

Known issues

1509741907 TYPO3Fluid\Fluid\Core\ViewHelper\Exception

Folder "[...]" does not exist.

Filefill tries to fetch the existing file from any resource. However, due to the FAL api the exception cannot be prevented nor handled by filefill. Try to reload the page again, the exception (for this specific file) should not occur anymore. Please note that there might be a new exception for a new file. In this case you need to reload your page until all files were properly created on your current system.

Community

filefill's People

Contributors

bjo3rnf avatar dogawaf avatar franzkugelmann avatar georgringer avatar grahamcampbell avatar helhum avatar ichhabrecht avatar julianhofmann avatar kaywalker avatar mbrodala avatar randomresult avatar spoonerweb avatar sypets avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

filefill's Issues

Unable to send test email from install tool due to exception of ext:filefill

With version 4.0.1 of the extension, it is no longer possible for me to send a test mail from the install tool. Sending fails with the following exception created by ext:filefill

Please verify $GLOBALS['TYPO3_CONF_VARS']['MAIL'][*] settings are valid. Error message: Unexpected File Fill Resource configuration "domain"

The Exception is thrown in RemoteResourceCollectionFactory::createRemoteResourceCollectionFromFlexForm(), where $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['filefill'] is empty.

image

Environment: TYPO3 version 10.4, non composer setup, PHP 7.4

Downgrading to version 3.3.1 resolves the problem.

Console commands not available in TYPO3 v11

Problem

The console commands filefill:reset and filefill:delete are missing in TYPO3 v11.
As the registration of console commands moved to Services.yaml file, it must be added there as well.

Placeholder for large images

Hey everyone,

currently, the placeholder service just stores the result of the URI in the target file without checking for errors. If there are errors/problems in the placeholder service the result is JSON and there is an error message. I got this error, because I use filefill for large images and the images are to large for https://via.placeholder.com/ as result, there is a "jpg" file in the filesystem with a JSON error in it. Bad for further processing like EXT:webp and regular content elements.

As result I add this code after this line https://github.com/IchHabRecht/filefill/blob/main/Classes/Resource/Handler/PlaceholderResource.php#L82 to reduce the file size, if the file size is the problem. I don't check the max file dimension or different errors of the service. This code just handle my usecase.

            if ($response->getHeaderLine('Content-Type') === 'application/json') {
                $result = \json_decode($content);
                if (isset($result->error) && $result->error === 'Requested image size is too large') {

                    $fileData = $fileObject->getProperties();
                    $fileData['identifier'] = $fileObject->getIdentifier();
                    $fileData['name'] = $fileObject->getName();

                    // half size
                    $fileData['width'] = floor($fileData['width'] / 2);
                    $fileData['height'] = floor($fileData['height'] / 2);

                    $fileObjectResized = new File($fileData, $fileObject->getStorage());

                    return $this->getFile($fileData['identifier'], $filePath, $fileObjectResized);
                }
            }

Perhaps PlaceholderResource.php should handle this more generall (at least throw an Exception if the result is json, so the getFile method return false).

Regards,
Tim

Support for TYPO3v12 LTS

Currently only TYPO3v12 12.0.x/12.1.x is supported by this package. Support for the final LTS (12.4.x) should be added/declared.

file upload breaks if placeholder is active

I noticed that it is impossible to upload files in the filelist module when placeholder is active.

I get an InvalidArgumentException with File /Redakteur/Bildschirmfoto_2018-07-18_um_14.46.26.png does not exist. (the file i uploaded).

Since the error is in an ajax request it's kind of annoying to get the formatted error message but I managed to copy the html of the exception and put it in a fiddle. I thought that was kind of creative... anyways:

It seems that the PlaceholderResource tries to check if it can create a placeholder and while doing so triggers an exception from the ResourceFactory since the file isn't written yet.

References non existing files

HI,

This is more a question than an issue, so I'll try to explain myself.

We have a big fileadmin folder, 5GB, that we are currently having as part of our artifact.
We are therefore testing filefill to have this excluded and be fetched when needed.

Currently, as I understand it, everything that is called from the frontend, and is missing, is added with filefill from either a list of domains or placeholder.com.

My situation is currently the editors when they want to use an image that is already used on a different page, but it isn't downloaded yet, they would not be able to find it in the Filelist.

Does a possibility exist to have the representation of the filelist correct even though the files aren't present in the system?
I don't know how this is stored in the DB currently, and if there are any options to do this.

I would be happy to hear your input on this.
And if development is needed/possible, I'll see what I can do either in regards to the implementation or sponsoring the work.

Error Message in TYPO3 v12

Hej everyone,
i have installed the extension in an TYPO3 v12 and became this error message:
`(1/1) #1476107295 TYPO3\CMS\Core\Error\Exception

PHP Warning: foreach() argument must be of type array|object, string given in /var/www/html/vendor/typo3/cms-backend/Classes/Form/Container/FlexFormSectionContainer.php line 80
`
DDEV, Apache, MariaDB, PHP 8.2.3
TYPO3 v12.4.2
File Fill 4.3.0

Best greetings
m.orange

Configure using LocalConfiguration

I would like to be able to use the LocalConfiguration to configure file fill instead of the database. The reason is: I would like to have filefill as a dev dependency. But If I don't have filefill in production, then the configuration isn't in the production database and if I import the database than I loose my configuration.

Site Configuration

as sys_domain is deprecated It would be great if Site Confiuration could be used.

Unexpected File Fill Resource configuration "1"

This error appears in TYPO3 9.5.24 with filefill 2.0.3 in composer mode, when setting the configuration via PHP/AdditionalConfiguration.php (copy&paste from the Manual).
As workaround, I can store the configuration in the Database.
Any hints what's wrong?
Bildschirmfoto von 2021-02-16 13-39-51

Image Builder not functional in v12

Due some changes to the TYPO3's core: v12 vs v11, the class GifBuilder causes crashes.

The problem is that in v12, the absolute path is passed to the output() method:
$this->output(Environment::getPublicPath() . '/' . $gifFileName);,
which with combination with the EXT returning the absolute path as well, the filename passed to the output() method looks like this: /var/www/html/public//var/www/html/public/var/transient/actual_filename.jpg, which will cause the exception being thrown.

How are processed images handled?

More a question than an issue. But how are processed images hanled? I have seen that they won't be downloaded if the original file exists, and they are marked as processed in the DB. But what happens if the original file don't exist. Will the original file downloaded, or the processed or nothing?

Wrong TYPO3 dependency in ext_emconf

There is max TYPO3 11.0.99 set as dependency. Different to composer.json.
Therefore in TER is filefill not listed as TYPO3 11 compatible. ;-)

TYPO3_CONF_VARS configuration not resolved

Hello Nicole,

Given

  • TYPO3 version 10.4 with TYPO3_CONF_VARS configuration for one single file storage
  • Configured like described in README.md (added to AdditionalConfig.php)
  • Using 'domain' as identifier
  • No further DB:sys_file_storage record configuration

Expected

  • Fetching assets from given domain through TYPO3_CONF_VARS configuration like it does with comparable Database record configuration

Actual

  • Assets does NOT load with TYPO3_CONF_VARS configuration
  • Assets does load with comparable Database record configuration

Solution

Fix use of createRemoteResourceCollectionFromConfiguration in ResourceFactorySlot->initializeResourceStorage.
Patch pending.

Moved DomainResource not found

Hello,

v4.1.0 has in Classes/Repository/DomainResourceRepository.php the moved class imported with:
use IchHabRecht\Filefill\Resource\Domain\DomainResource;

which in that version is located in:
use IchHabRecht\Filefill\Resource\Handler\DomainResource;

i dont know how to make a Pull, so i wanted to tell you this way. It produces an error with php 7.4, using

thank you very much for the great extension btw.

Fetching Forms

Would be grate if filefill could fetch form.yaml files if they are stored in fileadmin.

Command typo3cms cleanup:flexforms results in Exception

typo3 v11
php 8.0
filefill 4.2

[ ErrorReporting\Warning ]
  Warning: Undefined array key "REQUEST_SCHEME"


Exception code: 1

Exception trace:
#0 ()
   typo3conf/ext/filefill/Classes/Resource/Handler/DomainResource.php:48
#1 IchHabRecht\Filefill\Resource\Handler\DomainResource->__construct()
   typo3/sysext/core/Classes/Utility/GeneralUtility.php:3221
#2 TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance()
   typo3conf/ext/filefill/Classes/Resource/RemoteResourceCollectionFactory.php:46
#3 IchHabRecht\Filefill\Resource\RemoteResourceCollectionFactory::createRemoteResourceCollectionFromConfiguration()
   typo3conf/ext/filefill/Classes/Resource/RemoteResourceCollectionFactory.php:93
#4 IchHabRecht\Filefill\Resource\RemoteResourceCollectionFactory::createRemoteResourceCollectionFromFlexForm()
   typo3conf/ext/filefill/Classes/EventListener/ResourceStorageInitializationEventListener.php:68
#5 IchHabRecht\Filefill\EventListener\ResourceStorageInitializationEventListener->__invoke()
   typo3/sysext/core/Classes/EventDispatcher/EventDispatcher.php:51
#6 TYPO3\CMS\Core\EventDispatcher\EventDispatcher->dispatch()
   typo3/sysext/adminpanel/Classes/Service/EventDispatcher.php:41
#7 TYPO3\CMS\Adminpanel\Service\EventDispatcher->dispatch()
   typo3/sysext/core/Classes/Resource/StorageRepository.php:380
#8 TYPO3\CMS\Core\Resource\StorageRepository->getStorageObject()
   typo3/sysext/core/Classes/Resource/StorageRepository.php:102
#9 TYPO3\CMS\Core\Resource\StorageRepository->findByUid()
   typo3/sysext/form/Classes/Mvc/Persistence/FormPersistenceManager.php:689
#10 TYPO3\CMS\Form\Mvc\Persistence\FormPersistenceManager->getStorageByUid()
   typo3/sysext/form/Classes/Mvc/Persistence/FormPersistenceManager.php:388
#11 TYPO3\CMS\Form\Mvc\Persistence\FormPersistenceManager->getAccessibleFormStorageFolders()
   typo3/sysext/form/Classes/Mvc/Persistence/FormPersistenceManager.php:317
#12 TYPO3\CMS\Form\Mvc\Persistence\FormPersistenceManager->retrieveYamlFilesFromStorageFolders()
   typo3/sysext/form/Classes/Mvc/Persistence/FormPersistenceManager.php:239
#13 TYPO3\CMS\Form\Mvc\Persistence\FormPersistenceManager->listForms()
   typo3/sysext/form/Classes/Hooks/DataStructureIdentifierHook.php:117
#14 TYPO3\CMS\Form\Hooks\DataStructureIdentifierHook->parseDataStructureByIdentifierPostProcess()
   typo3/sysext/core/Classes/Configuration/FlexForm/FlexFormTools.php:749
#15 TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools->parseDataStructureByIdentifier()
   typo3/sysext/core/Classes/Configuration/FlexForm/FlexFormTools.php:787
#16 TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools->traverseFlexFormXMLData()
   typo3/sysext/core/Classes/Configuration/FlexForm/FlexFormTools.php:914
#17 TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools->cleanFlexFormXML()
   typo3/sysext/lowlevel/Classes/Command/CleanFlexFormsCommand.php:248
#18 TYPO3\CMS\Lowlevel\Command\CleanFlexFormsCommand->compareAllFlexFormsInRecord()
   typo3/sysext/lowlevel/Classes/Command/CleanFlexFormsCommand.php:163
#19 TYPO3\CMS\Lowlevel\Command\CleanFlexFormsCommand->findAllDirtyFlexformsInPage()
   typo3/sysext/lowlevel/Classes/Command/CleanFlexFormsCommand.php:203
#20 TYPO3\CMS\Lowlevel\Command\CleanFlexFormsCommand->findAllDirtyFlexformsInPage()
   typo3/sysext/lowlevel/Classes/Command/CleanFlexFormsCommand.php:203
#21 TYPO3\CMS\Lowlevel\Command\CleanFlexFormsCommand->findAllDirtyFlexformsInPage()
   typo3/sysext/lowlevel/Classes/Command/CleanFlexFormsCommand.php:203
#22 TYPO3\CMS\Lowlevel\Command\CleanFlexFormsCommand->findAllDirtyFlexformsInPage()
   typo3/sysext/lowlevel/Classes/Command/CleanFlexFormsCommand.php:203
#23 TYPO3\CMS\Lowlevel\Command\CleanFlexFormsCommand->findAllDirtyFlexformsInPage()
   typo3/sysext/lowlevel/Classes/Command/CleanFlexFormsCommand.php:203
#24 TYPO3\CMS\Lowlevel\Command\CleanFlexFormsCommand->findAllDirtyFlexformsInPage()
   typo3/sysext/lowlevel/Classes/Command/CleanFlexFormsCommand.php:110
#25 TYPO3\CMS\Lowlevel\Command\CleanFlexFormsCommand->execute()
   vendor/symfony/console/Command/Command.php:298
#26 Symfony\Component\Console\Command\Command->run()
   vendor/symfony/console/Application.php:1040
#27 Symfony\Component\Console\Application->doRunCommand()
   vendor/helhum/typo3-console/Classes/Console/Mvc/Cli/Symfony/Application.php:189
#28 Helhum\Typo3Console\Mvc\Cli\Symfony\Application->doRunCommand()
   vendor/symfony/console/Application.php:301
#29 Symfony\Component\Console\Application->doRun()
   vendor/symfony/console/Application.php:171
#30 Symfony\Component\Console\Application->run()
   vendor/helhum/typo3-console/Classes/Console/Core/Kernel.php:118
#31 Helhum\Typo3Console\Core\Kernel->handle()
   vendor/helhum/typo3-console/Scripts/typo3-console.php:18
#32 {closure}()
   vendor/helhum/typo3-console/Scripts/typo3-console.php:20
#33 require()
   vendor/helhum/typo3-console/typo3cms:3
#34 include()
   vendor/bin/typo3cms:120

Deactivate per host without uninstalling

Hello, your ext is very helpful in my everyday work, but currently I'm trying to make a setup in which it runs only on selected dev environments, while being basically inactive on production server, to avoid calling any unnecessary code there. But uninstalling ext there is not a solution, I need full git sync of whole system, so it must rely on configuration (or ApplicationContext) in fully automatic way. (so checkbox in storage record in database also won't help)
There is this option $GLOBALS['TYPO3_CONF_VARS']['EXT']['runtimeActivatedPackages'] which allows to enable extension conditionally, but, first thing, it doesn't keep database structure then, also this option is deprecated in 10.4.

My idea was to add something like that in ext_localconf:

call_user_func(function () {
	if ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['filefill']['deactivate'])   {
		return;
	}
....

which deactivates all hooks and slots registers, disables whole functionality while keeping extension installed, I can put global 'deactivate' => true in LocalConfiguration and then set 'deactivate' => false conditionally in AdditionalConfiguration.

But now I found version 4.0 which abandoned deprecated signal/slots for new yaml configured services as event listeners. And the whole idea is probably impossible to achieve with yaml (or at least I have no idea how to tell it to not load that yaml)
Do you have maybe any other idea how to do that? I didn't really want to put a number of conditions in every class just to tell it to exit. Maybe I forgot something simple or I can't just see an option for that.

Not able to render EXT:...images with fluid in backend context

This is a similar issue than was already reported by @derhansen in #55.

We hit the same situation (also hard to figure out what the problem was) not in the Install Tool but by calling a scheduler task in the backend when having filefill enabled and a configured login.loginLogo. EXT:brofix's task tries to send an Email using FluidEmail. I end up with:

Execution of task "Execute console commands (scheduler)" failed with the following message:
PHP Warning: sha1_file(typo3conf/ext/sitepackage/Resources/Public/Icons/logo-sign.svg): failed to open stream:
No such file or directory in /app/html/typo3/sysext/core/Classes/Resource/Driver/LocalDriver.php line 751

Even more simple to reproduce. Add something like this to the fluid template of your Backend Module:

<f:image src="EXT:sitepackage/Resources/Public/Icons/logo.svg" absolute="1" alt="TYPO3 Logo" height="41" width="150" />

Seems like the FileFillDriver::getAbsolutePath misses prefixing a site prefix (absoluteBasePath = null for the "pseudo-storage = 0" in this situation).

Upload of case sensitive files is broken in default file storages

Enforcing a case sensitive file system introduced in 6757ce6 leads to an error while uploading files in case the toggle switch "Uses case sensitive identifiers" within an file storage is disabled.

Actually the file paths needs to become lowercase if the toggle switch is disabled. Else the file is "read-only" in file list, no thumbnail is generated and clicking the info button results in the exception:

Object with identifier "1:/user_upload/My_LowerCased_File.jpg" does not exist in storage

Since I'm not sure why this change had to be made at all, a revert does not seem to be the best solution here.

I would recommend to write a note in the "usage" section that this option has to be enabled in a file storage if it is also set in a file storage on a domain resource. Then the core function would not have to be overwritten and the extension would be compatible with the standard configuration of a FIle Storage.

Not compatible with VHS ViewHelper "content.resources.fal"

At least for me it was not working. I have in the template:

<f:for each="{v:content.resources.fal(field: 'images')}" as="image">

This returns an empty array when the files are "absent" instead of having filefill fetch them. The culprid is this line in the ViewHelper:

https://github.com/FluidTYPO3/vhs/blob/development/Classes/ViewHelpers/Resource/Record/FalViewHelper.php#L234 :

            if ($file->getProperty('t3ver_state') !== VersionState::DELETE_PLACEHOLDER) {
                try {
                    $resources[] = $this->arguments['asObjects'] ? $file : $this->getResource($file);
                } catch (\InvalidArgumentException $error) {
                    // Pokemon-style, catch-all and suppress. This exception type is thrown if a file gets removed.
                }
            }

Is there any way filefill can "hook into" earlier in the process so that the file "is there" for this ViewHelper to work?

Or is this a bug in the way VHS uses the FAL API and I should file an issue on the VHS issue tracker?

Cropping / Imagemanipulation does not work in Frontend

Hey @IchHabRecht

thanks for this great extension. It helps a lot with getting a local system running without syncing the entire fileadmin, really love it :D

Nevertheless I encountered a problem in two separate instances: Images are cropped with a fixed format using the default TYPO3 image manipulation on the leading TYPO3 instance. The image is cropped and comes out of _processed_ folder as intended.

On my local instance the original file is taken instead without cropping in frontend. This seems to be nothing but a frontend issue since the cropping mask in sys_file_reference is the same on both systems - so from backend perspective everything looks good AFAICS. If I save the cropping and the record / sys_file_reference without changing anything, then the image in frontend gets displayed with cropping like on the leading instance and stays like this - so plain saving seems to fix it.

Sadly I cannot hand in a PR with this issue due to not having time yet. Maybe I dig into this later, but before I forget about this I wanted to post it here.

Not working for nested storages

Technically TYPO3 allows for creating storages which exist within other storages. Example:

  • Storage UID 1: fileadmin/
  • Storage UID 2: fileadmin/media/

If a file from storage UID 2 like fileadmin/media/videos/video.mp4 is now embedded in content, Filefill fails to download this file.

Compatibility with Symfony 7

When running on TYPo3 v 12.4 with Symfony 7 I get a fatal errors:

PHP Fatal error: Declaration of IchHabRecht\Filefill\Command\ResetCommand::execute(Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output) must be compatible with Symfony
\Component\Console\Command\Command::execute(Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output): int in /var/www/html/vendor/ichhabrecht/filefill/Classes/Command/Reset
Command.php on line 52

Fatal error: Declaration of IchHabRecht\Filefill\Command\ResetCommand::execute(Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output) must be compatible with Symfony\Comp
onent\Console\Command\Command::execute(Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output): int in /var/www/html/vendor/ichhabrecht/filefill/Classes/Command/ResetComma
nd.php on line 52

TYPO3 Extension Award - Best Documentation 2021

This issue is for your information only. Please feel free to close


Congratulations! ✨ 🎉
Your extension has been nominated for the TYPO3 Extension Award - Best Documentation 2021.

Three extensions will be chosen as winners by a community vote. In case your extension wins, you will be notified shortly after the voting.

Voting: November 24 - December 8, 2021 (2 weeks)

In order to vote for an extension:

  1. Go to https://extensions.typo3.org and login
  2. Click on the “Vote now” button on https://extensions.typo3.org/extension-documentation-award
  3. Give 3 points, 2 points and 1 point each for each extension, by clicking on the radio button

Please also look for news on https://typo3.org in the next few days or look on “Community news” for a more detailed description.

Thank you for making your extension available for the TYPO3 community.

Best of luck - and keep inspiring people to share.

Sybille 😃

If you have any questions, please contact me on TYPO3 Slack (@Sy).

Downloading files from server can exceed PHP memory limit

The RemoteResourceCollection reads a remote file into the memory using \TYPO3\CMS\Core\Utility\GeneralUtility::getUrl(). When it comes to videos or other big resources that can easily exceed the PHP memory limit.
I suggest to use another method to download the file, which does not load the whole file content into memory. Like file_put_contents().

Undefined array key "tableName"

Screenshot 2022-12-08

When adding a content element to a page, there is a warning message displayed in the backend.

This message only occurs while also using the "gridelementsteam/gridelements" extension together with filefill. (I did not get it while using PHP 7.4.)

Filefill 4.1.1
PHP v8.1

Message is:
Core: Error handler (BE): PHP Warning: Undefinded array key "tableName" in /var/www/html/public/typo3conf/ext/filefill/Classes/Hooks/FlexFormToolsHook.php line 24

Sorry, I can not find the reason for it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.