Jump to content

Recommended Posts

Posted

Hi! I am trying to create a hook that takes the value of a form file field, and add it to an image gallery of an existing page.

$forms->addHookBefore('FormBuilderProcessor::processInputDone', function($e) {
  $form = $e->arguments(0);
  if($form->name == 'new-inuse') {
	// related_font is a page selector
    $font = $form->getChildByName('related_font');
	// getting the page name
    $fontName = $font->attr('value')->name;
	// finds the page from its name
    $fontPage = wire('pages')->find("name=$fontName");
	// in_use_image is a file upload field
    $image = $form->getChildByName('in_use_image');
	// trying to add the image to the existing image gallery in_use field
    $fontPage->in_use->add('$image'); // error here

    $fontPage->save();
  }
});

This outputs the following error: `Call to a member function add() on null`. Any idea what’s wrong with my code?

Posted

Thank you for your answer and for pointing my mistakes!

Here is an updated code with a new error. Somehow add() refuse the $image object:

$forms->addHookBefore('FormBuilderProcessor::processInputDone', function($e) {
  $form = $e->arguments(0);
  if($form->name == 'new-inuse') {
    $font = $form->getChildByName('related_font');
    $fontName = $font->attr('value')->name;
    $fontPage = wire('pages')->findOne("name=$fontName");
    $image = $form->getChildByName('in_use_image');
    $fontPage->of(false);
    $fontPage->in_use->add($image);
    $fontPage->save();
  }
});
Error: Exception: Item added to Pageimages is not an allowed type (in wire/core/WireArray.php line 286)

How can I make sure $image is a valid image object? I tried to echo $image->url but nothing is happens.

Posted

I think $image is likely an array of file paths. What I like to do in such cases is to dump the variable in question to a PW log.

wire('log')->save('form-builder-debug', print_r($image, true));

This should give you a clue when you look into Setup -> Logs -> form-builder-debug.

  • Like 1
Posted

Thank you for letting me know about wire('log'), it is much more handful that the way I found to debug.
This is what my $image object looks like. I can’t find any documentation about this object and how to find the image url (for instance), or anything else to give to add().

InputfieldFormBuilderFile Object ( [data] => Array ( [label] => In use image [description] => Test desc [icon] => [notes] => [detail] => [head] => [required] => 1 [requiredIf] => [collapsed] => 0 [showIf] => [columnWidth] => [skipLabel] => [wrapClass] => [headerClass] => [contentClass] => [textFormat] => 4 [renderValueFlags] => 0 [prependMarkup] => [appendMarkup] => [formID] => 1 [entryID] => 0 [processor] => FormBuilderProcessor Object ( [data] => Array ( [id] => 1 [saveFlags] => 9 [skipSessionKey] => [formName] => new-inuse [submitText] => Submit [honeypot] => [turingTest] => Array ( ) [emailTo] => [emailFrom] => [emailFrom2] => [emailSubject] => Form Submission [responderTo] => [responderFrom] => [responderSubject] => Auto-Response [responderBody] => [successUrl] => [successMessage] => Thank you, your form has been submitted. [errorMessage] => One or more errors prevented submission of the form. Please correct and try again. [action2] => [action2_add] => Array ( ) [action2_remove] => Array ( ) [action2_rename] => Array ( ) [akismet] => [allowPreset] => [savePageParent] => 1006 [savePageTemplate] => 43 [savePageFields] => Array ( [name] => related_font [1] => title [114] => in_use_image ) [savePageStatus] => 0 [framework] => Basic [fbForm] => FormBuilderForm Object ( [forms:protected] => FormBuilderMain Object ( [formNames:protected] => Array ( [1] => new-inuse ) [database:protected] => WireDatabasePDO Object ( ) [filesPath:protected] => /site/assets/cache/form-builder/ [config:protected] => Config Object ( [data] => Array ( [dbName] => velvetyndev [internal] => 1 [urls] => Paths Object ( [data] => Array ( [wire] => wire/ [site] => site/ [modules] => wire/modules/ [siteModules] => site/modules/ [core] => wire/core/ [assets] => site/assets/ [cache] => site/assets/cache/ [logs] => site/assets/logs/ [files] => site/assets/files/ [tmp] => site/assets/tmp/ [templates] => site/templates/ [fieldTemplates] => site/templates/fields/ [adminTemplates] => wire/templates-admin/ [AdminThemeUikit] => wire/modules/AdminTheme/AdminThemeUikit/ [AdminThemeReno] => wire/modules/AdminTheme/AdminThemeReno/ [AdminThemeDefault] => wire/modules/AdminTheme/AdminThemeDefault/ [FileCompilerTags] => wire/modules/ [PageFrontEdit] => wire/modules/Page/PageFrontEdit/ [ProcessPageView] => wire/modules/Process/ [ProcessPageSort] => wire/modules/Process/ [ProcessPageSearch] => wire/modules/Process/ProcessPageSearch/ [ProcessPagesExportImport] => wire/modules/Process/ProcessPagesExportImport/ [ProcessRecentPages] => wire/modules/Process/ProcessRecentPages/ [ProcessHome] => wire/modules/Process/ [ProcessModule] => wire/modules/Process/ProcessModule/ [ProcessPageEdit] => wire/modules/Process/ProcessPageEdit/ [ProcessTemplate] => wire/modules/Process/ProcessTemplate/ [ProcessPageLister] => wire/modules/Process/ProcessPageLister/ [ProcessLogger] => wire/modules/Process/ProcessLogger/ [ProcessForgotPassword] => wire/modules/Process/ [ProcessPageAdd] => wire/modules/Process/ProcessPageAdd/

 

Posted
2 hours ago, rooofl said:

This is what my $image object looks like. I can’t find any documentation about this object and how to find the image url (for instance), or anything else to give to add().

But we can at least see that it's an InputfieldFormBuilderFile object. Since FormBuilder Inputfields inherit (I took a peek into the code) from the regular Inputfield class, you can refine your debug output to only show its value attribute (you're already reading $font->attr('value') - it's the way to go with all form fields). I'm pretty sure it's going to be some kind of array.

wire('log')->save('form-builder-debug', print_r($image->attr('value'), true));

 

  • Like 1

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...