*/
public function upgrade_5_46_alpha1($rev): void {
$this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev);
+ $this->addTask('Add "Import Custom Data" menu', 'addImportCustomMenu');
+ }
+
+ /**
+ * Add menu item "Import MultiValued Custom" below "Import Activities"
+ *
+ * @param \CRM_Queue_TaskContext $ctx
+ * @return bool
+ */
+ public static function addImportCustomMenu(CRM_Queue_TaskContext $ctx) {
+ try {
+ // Get "Import Activities" and remove separator
+ $importActivities = civicrm_api3('Navigation', 'get', [
+ 'name' => 'Import Activities',
+ 'return' => ['id', 'parent_id', 'weight'],
+ 'sequential' => 1,
+ 'domain_id' => CRM_Core_Config::domainID(),
+ 'api.Navigation.create' => ['has_separator' => ''],
+ ])['values'][0] ?? NULL;
+ $existing = civicrm_api3('Navigation', 'getcount', [
+ 'name' => "Import MultiValued Custom",
+ 'domain_id' => CRM_Core_Config::domainID(),
+ ]);
+ // Insert "Import MultiValued Custom" below "Import Activities"
+ if ($importActivities && !$existing) {
+ // Use APIv4 because it will auto-adjust weights unlike v3
+ civicrm_api4('Navigation', 'create', [
+ 'checkPermissions' => FALSE,
+ 'values' => [
+ 'parent_id' => $importActivities['parent_id'],
+ 'label' => ts('Import Custom Data'),
+ 'weight' => $importActivities['weight'] + 1,
+ 'name' => 'Import MultiValued Custom',
+ 'permission' => "import contacts",
+ 'url' => "civicrm/import/custom?reset=1",
+ 'has_separator' => 1,
+ 'is_active' => 1,
+ ],
+ ]);
+ }
+ }
+ catch (Exception $e) {
+ // Couldn't create menu item.
+ }
+ return TRUE;
}
}
( @domainID, 'civicrm/activity?reset=1&action=add&context=standalone', '{ts escape="sql" skip="true"}New Activity{/ts}', 'New Activity', NULL, '', @contactlastID, '1', NULL, 5 ),
( @domainID, 'civicrm/activity/email/add?atype=3&action=add&reset=1&context=standalone', '{ts escape="sql" skip="true"}New Email{/ts}', 'New Email', NULL, '', @contactlastID, '1', '1', 6 ),
( @domainID, 'civicrm/import/contact?reset=1', '{ts escape="sql" skip="true"}Import Contacts{/ts}', 'Import Contacts', 'import contacts', '', @contactlastID, '1', NULL, 7 ),
- ( @domainID, 'civicrm/import/activity?reset=1', '{ts escape="sql" skip="true"}Import Activities{/ts}', 'Import Activities', 'import contacts', '', @contactlastID, '1', '1', 8 ),
- ( @domainID, 'civicrm/group/add?reset=1', '{ts escape="sql" skip="true"}New Group{/ts}', 'New Group', 'edit groups', '', @contactlastID, '1', NULL, 9 ),
- ( @domainID, 'civicrm/group?reset=1', '{ts escape="sql" skip="true"}Manage Groups{/ts}', 'Manage Groups', 'access CiviCRM', '', @contactlastID, '1', '1', 10 ),
- ( @domainID, 'civicrm/tag?reset=1', '{ts escape="sql" skip="true"}Manage Tags{/ts}', 'Manage Tags (Categories)', 'manage tags', '', @contactlastID, '1','1', 12 ),
+ ( @domainID, 'civicrm/import/activity?reset=1', '{ts escape="sql" skip="true"}Import Activities{/ts}', 'Import Activities', 'import contacts', '', @contactlastID, '1', NULL, 8 ),
+ ( @domainID, 'civicrm/import/custom?reset=1', '{ts escape="sql" skip="true"}Import Custom Data{/ts}', 'Import MultiValued Custom', 'import contacts', '', @contactlastID, '1', '1', 9 ),
+ ( @domainID, 'civicrm/group/add?reset=1', '{ts escape="sql" skip="true"}New Group{/ts}', 'New Group', 'edit groups', '', @contactlastID, '1', NULL, 10 ),
+ ( @domainID, 'civicrm/group?reset=1', '{ts escape="sql" skip="true"}Manage Groups{/ts}', 'Manage Groups', 'access CiviCRM', '', @contactlastID, '1', '1', 11 ),
+ ( @domainID, 'civicrm/tag?reset=1', '{ts escape="sql" skip="true"}Manage Tags{/ts}', 'Manage Tags (Categories)', 'manage tags', '', @contactlastID, '1', '1', 12 ),
( @domainID, 'civicrm/contact/deduperules?reset=1', '{ts escape="sql" skip="true"}Find and Merge Duplicate Contacts{/ts}', 'Find and Merge Duplicate Contacts', 'administer dedupe rules,merge duplicate contacts', 'OR', @contactlastID, '1', NULL, 13 );
INSERT INTO civicrm_navigation