Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dev/core#1093: Fix Installation of Custom Fields with Option Values From XML #15726

Conversation

MiyaNoctem
Copy link
Contributor

Overview

we've run into an issue with bulk create of custom fields and direct debit extension. On previous versions of CiviCRM, when we defined option groups for a custom field on an xml file, we were able to use option_group_name to define the option group to be used for values of the custom field.

Before

The old version of the method to import custom fields used to process these option group names and replace them by their corresponding ID. Check:

https://github.com/civicrm/civicrm-core/blob/5.5/CRM/Utils/Migrate/Import.php#L376-L380

This fails to happen when using bulkSave() to import custom fields.

After

Added logicthat maps option_group names to their ID's, and used API4 call to implement bulk save action to create the fields.

@civibot
Copy link

civibot bot commented Nov 4, 2019

(Standard links)

@civibot civibot bot added the 5.19 label Nov 4, 2019
@MiyaNoctem MiyaNoctem force-pushed the dev-core-1093-fix-installation-of-custom-fields-with-option-values branch from 0993d71 to 170f25f Compare November 4, 2019 16:52
@colemanw
Copy link
Member

colemanw commented Nov 4, 2019

Is there any unit test coverage of this function?

@eileenmcnaughton
Copy link
Contributor

@seamuslee001 is this the one you already ported #15724

@seamuslee001
Copy link
Contributor

@eileenmcnaughton separate issues

@eileenmcnaughton
Copy link
Contributor

@colemanw - no - which is why this issue has arisen. But I don't think this regression-fix is the point we should insist on it

@eileenmcnaughton
Copy link
Contributor

I'm going to merge this - it's pretty isolated & if this is working for @MiyaNoctem then I think that is enough in this case as the code is not complex - it just needs to do the thing it's not doing

@eileenmcnaughton eileenmcnaughton merged commit 596e016 into civicrm:5.19 Nov 4, 2019
totten added a commit to totten/civicrm-core that referenced this pull request Nov 6, 2019
Overview
--------

This fixes a recent/unreleased regression from civicrm#15726 in which the D7 demo build fails.

Before
------

When running `civibuild reinstall ...` on a `drupal-demo` site, it fails at this step:

```
+++ drush -y cvapi extension.install key=org.civicrm.volunteer debug=1
Authorization failed                                                                                                                                                   [error]
Array
(
    [error_code] => unauthorized
    [entity] => Extension
    [action] => install
    [trace] => #0 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/Civi/API/Kernel.php(166): Civi\API\Kernel->authorize(Object(Civi\Api4\Provider\ActionObjectProvider), Object(Civi\Api4\Generic\DAOSaveAction))
1 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/Civi/Api4/Generic/AbstractAction.php(235): Civi\API\Kernel->runRequest(Object(Civi\Api4\Generic\DAOSaveAction))
2 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/CRM/Utils/Migrate/Import.php(374): Civi\Api4\Generic\AbstractAction->execute()
3 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/CRM/Utils/Migrate/Import.php(82): CRM_Utils_Migrate_Import->customFields(Object(SimpleXMLElement), Array)
4 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/tools/extensions/civivolunteer/CRM/Volunteer/Upgrader.php(836): CRM_Utils_Migrate_Import->runXmlElement(Object(SimpleXMLElement))
5 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/tools/extensions/civivolunteer/CRM/Volunteer/Upgrader.php(48): CRM_Volunteer_Upgrader->executeCustomDataTemplateFile('volunteer-custo...')
6 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/tools/extensions/civivolunteer/CRM/Volunteer/Upgrader/Base.php(306): CRM_Volunteer_Upgrader->install()
7 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/tools/extensions/civivolunteer/volunteer.civix.php(131): CRM_Volunteer_Upgrader_Base->onInstall()
8 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/tools/extensions/civivolunteer/volunteer.php(204): _volunteer_civix_civicrm_install()
9 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/CRM/Extension/Manager/Module.php(76): volunteer_civicrm_install()
10 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/CRM/Extension/Manager/Module.php(48): CRM_Extension_Manager_Module->callHook(Object(CRM_Extension_Info), 'install')
11 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/CRM/Extension/Manager.php(264): CRM_Extension_Manager_Module->onPreInstall(Object(CRM_Extension_Info))
12 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/api/v3/Extension.php(58): CRM_Extension_Manager->install(Array)
13 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/Civi/API/Provider/MagicFunctionProvider.php(101): civicrm_api3_extension_install(Array)
14 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/Civi/API/Kernel.php(168): Civi\API\Provider\MagicFunctionProvider->invoke(Array)
15 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/Civi/API/Kernel.php(99): Civi\API\Kernel->runRequest(Array)
16 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/api/api.php(23): Civi\API\Kernel->runSafe('extension', 'install', Array, NULL)
17 /Users/myuser/bknix/build/dmaster/web/sites/all/modules/civicrm/drupal/drush/civicrm.drush.inc(1557): civicrm_api('extension', 'install', Array)
18 phar:///Users/myuser/bknix/civicrm-buildkit/extern/drush8.phar/includes/command.inc(422): drush_civicrm_api('extension.insta...', 'key=org.civicrm...', 'debug=1')
19 phar:///Users/myuser/bknix/civicrm-buildkit/extern/drush8.phar/includes/command.inc(231): _drush_invoke_hooks(Array, Array)
20 phar:///Users/myuser/bknix/civicrm-buildkit/extern/drush8.phar/includes/command.inc(199): drush_command('extension.insta...', 'key=org.civicrm...', 'debug=1')
21 phar:///Users/myuser/bknix/civicrm-buildkit/extern/drush8.phar/lib/Drush/Boot/BaseBoot.php(67): drush_dispatch(Array)
22 phar:///Users/myuser/bknix/civicrm-buildkit/extern/drush8.phar/includes/preflight.inc(66): Drush\Boot\BaseBoot->bootstrap_and_dispatch()
23 phar:///Users/myuser/bknix/civicrm-buildkit/extern/drush8.phar/includes/startup.inc(465): drush_main()
24 phar:///Users/myuser/bknix/civicrm-buildkit/extern/drush8.phar/includes/startup.inc(369): drush_run_main(false, '/', 'Phar detected. ...')
25 phar:///Users/myuser/bknix/civicrm-buildkit/extern/drush8.phar/drush(114): drush_startup(Array)
26 /Users/myuser/bknix/civicrm-buildkit/extern/drush8.phar(10): require('phar:///Users/t...')
27 {main}
    [is_error] => 1
    [error_message] => Authorization failed
)
```

After
-----

It works again.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants