CiviCRM Core issueshttps://lab.civicrm.org/dev/core/-/issues2023-03-10T06:17:56Zhttps://lab.civicrm.org/dev/core/-/issues/1580Allow to search on contribution id2023-03-10T06:17:56ZyashodhaAllow to search on contribution idAllow to search on contribution idAllow to search on contribution id5.28.1yashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/1934Merging Contacts causes DB Error: Already Exists - conflict on setting table2020-09-03T20:15:33ZsadashivMerging Contacts causes DB Error: Already Exists - conflict on setting tableOverview
----------------------------------------
After upgrading my civicrm from 4.7.31 to 5.27.0 I found that merging contacts breaks. It no longer merges the contacts but shows DB Error: Already Exist as shown in the snapshot.
Repro...Overview
----------------------------------------
After upgrading my civicrm from 4.7.31 to 5.27.0 I found that merging contacts breaks. It no longer merges the contacts but shows DB Error: Already Exist as shown in the snapshot.
Reproduction steps
----------------------------------------
1. Click on **Contacts -> New Individual**.
2. Entered **First Name** and **Last Name** and clicked **Save**.
3. Follow same steps and create one more contact which is a duplicate.
4. Check if both contacts have a navigation entry in the civicrm_setting table
5. Click on **Search -> Find Contacts**.
6. Search by the name and locate the duplicates
7. Click on merge contact
8. Click merge
9. Got an error "**DB error**".
Current behaviour
----------------------------------------
![Screen_Shot_2020-08-04_at_2.57.24_PM](/uploads/0939bd069e2b722d1f0f5275692a4a9c/Screen_Shot_2020-08-04_at_2.57.24_PM.png)
Backtrace from ConfigLogs
```
Aug 06 04:12:23 [error] $Fatal Error Details = Array
(
[callback] => Array
(
[0] => CRM_Core_Error
[1] => handle
) [code] => -5
[message] => DB Error: already exists
[mode] => 16
[debug_info] => UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714 [nativecode=1062 ** Duplicate entry '1-244336-navigation' for key 'index_domain_contact_name']
[type] => DB_Error
[user_info] => UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714 [nativecode=1062 ** Duplicate entry '1-244336-navigation' for key 'index_domain_contact_name']
[to_string] => [db_error: message="DB Error: already exists" code=-5 mode=callback callback=CRM_Core_Error::handle prefix="" info="UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714 [nativecode=1062 ** Duplicate entry '1-244336-navigation' for key 'index_domain_contact_name']"]
)
Aug 06 04:12:23 [debug] $backTrace = #0 /var/www/html/sites/all/modules/civicrm/CRM/Core/Error.php(205): CRM_Core_Error::backtrace("backTrace", TRUE)
#1 /var/www/html/sites/all/modules/civicrm/vendor/pear/pear-core-minimal/src/PEAR.php(922): CRM_Core_Error::handle(Object(DB_Error))
#2 /var/www/html/sites/all/modules/civicrm/packages/DB.php(998): PEAR_Error->__construct("DB Error: already exists", -5, 16, (Array:2), "UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714 [nat...")
#3 /var/www/html/sites/all/modules/civicrm/vendor/pear/pear-core-minimal/src/PEAR.php(575): DB_Error->__construct(-5, 16, (Array:2), "UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714 [nat...")
#4 /var/www/html/sites/all/modules/civicrm/vendor/pear/pear-core-minimal/src/PEAR.php(223): PEAR->_raiseError(Object(DB_mysqli), NULL, -5, 16, (Array:2), "UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714 [nat...", "DB_Error", TRUE)
#5 /var/www/html/sites/all/modules/civicrm/packages/DB/common.php(1925): PEAR->__call("raiseError", (Array:7))
#6 /var/www/html/sites/all/modules/civicrm/packages/DB/mysqli.php(935): DB_common->raiseError(-5, NULL, NULL, "UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714 [nat...", "1062 ** Duplicate entry '1-244336-navigation' for key 'index_domain_contact_n...")
#7 /var/www/html/sites/all/modules/civicrm/packages/DB/mysqli.php(405): DB_mysqli->mysqliRaiseError()
#8 /var/www/html/sites/all/modules/civicrm/packages/DB/common.php(1231): DB_mysqli->simpleQuery("UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714")
#9 /var/www/html/sites/all/modules/civicrm/packages/DB/DataObject.php(2696): DB_common->query("UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714")
#10 /var/www/html/sites/all/modules/civicrm/packages/DB/DataObject.php(1829): DB_DataObject->_query("UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714")
#11 /var/www/html/sites/all/modules/civicrm/CRM/Core/DAO.php(421): DB_DataObject->query("UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714")
#12 /var/www/html/sites/all/modules/civicrm/CRM/Core/DAO.php(1473): CRM_Core_DAO->query("UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714", TRUE)
#13 /var/www/html/sites/all/modules/civicrm/CRM/Dedupe/Merger.php(563): CRM_Core_DAO::executeQuery("UPDATE civicrm_setting SET contact_id = 244336 WHERE contact_id = 243714", (Array:0), TRUE, NULL, TRUE)
#14 /var/www/html/sites/all/modules/civicrm/CRM/Dedupe/Merger.php(1316): CRM_Dedupe_Merger::moveContactBelongings(Object(CRM_Dedupe_MergeHandler), (Array:12), (Array:0))
#15 /var/www/html/sites/all/modules/civicrm/CRM/Contact/Form/Merge.php(308): CRM_Dedupe_Merger::moveAllBelongings(244336, 243714, (Array:74))
#16 /var/www/html/sites/all/modules/civicrm/CRM/Core/Form.php(484): CRM_Contact_Form_Merge->postProcess()
#17 /var/www/html/sites/all/modules/civicrm/CRM/Core/StateMachine.php(144): CRM_Core_Form->mainProcess()
#18 /var/www/html/sites/all/modules/civicrm/CRM/Core/QuickForm/Action/Next.php(45): CRM_Core_StateMachine->perform(Object(CRM_Contact_Form_Merge), "next", "Next")
#19 /var/www/html/sites/all/modules/civicrm/packages/HTML/QuickForm/Controller.php(203): CRM_Core_QuickForm_Action_Next->perform(Object(CRM_Contact_Form_Merge), "next")
#20 /var/www/html/sites/all/modules/civicrm/packages/HTML/QuickForm/Page.php(103): HTML_QuickForm_Controller->handle(Object(CRM_Contact_Form_Merge), "next")
#21 /var/www/html/sites/all/modules/civicrm/CRM/Core/Controller.php(335): HTML_QuickForm_Page->handle("next")
#22 /var/www/html/sites/all/modules/civicrm/CRM/Utils/Wrapper.php(98): CRM_Core_Controller->run()
#23 /var/www/html/sites/all/modules/civicrm/CRM/Core/Invoke.php(285): CRM_Utils_Wrapper->run("CRM_Contact_Form_Merge", "Merge Contact", (Array:0))
#24 /var/www/html/sites/all/modules/civicrm/CRM/Core/Invoke.php(68): CRM_Core_Invoke::runItem((Array:13))
#25 /var/www/html/sites/all/modules/civicrm/CRM/Core/Invoke.php(36): CRM_Core_Invoke::_invoke((Array:3))
#26 /var/www/html/sites/all/modules/civicrm/drupal/civicrm.module(454): CRM_Core_Invoke::invoke((Array:3))
#27 /var/www/html/includes/menu.inc(527): civicrm_invoke("contact", "merge")
#28 /var/www/html/index.php(21): menu_execute_active_handler()
#29 {main}
```
Expected behaviour
----------------------------------------
Contact should be merged
Environment information
----------------------------------------
* __Browser:__ Tried on Firefox and chrome both
* __CiviCRM:__ Tried with 5.27.0
* __PHP:__ Tested with 7.2
* __CMS:__ Drupal 7.32
* __Database:__ MySQL 5.7.7
* __Web Server:__ Apache 2.4
Comments
----------------------------------------
Issue seems to be related to https://github.com/civicrm/civicrm-core/commit/bbc11d1920687d2e88c0fd24697032fd9a1b673f as reverting this change fixes this issue.5.28.1https://lab.civicrm.org/dev/core/-/issues/1945[Regression] Users without permission can edit recurring contributions2020-08-20T10:27:28Zjensschuppe[Regression] Users without permission can edit recurring contributionsOverview
----------------------------------------
Users _without_ the permission "edit contributions" can edit _recurring_ contributions of any contact (might be mitigated by specific scenarios, see below).
Reproduction steps
----------...Overview
----------------------------------------
Users _without_ the permission "edit contributions" can edit _recurring_ contributions of any contact (might be mitigated by specific scenarios, see below).
Reproduction steps
----------------------------------------
1. Create a user with a role that has only the following permissions:
* CiviCRM: access CiviCRM backend and API
* CiviContribute (Contributions): access CiviContribute
but explicitly _not_ the "CiviContribute (Contributions): Edit Contributions" permission
2. _Configure an ACL for them to view contacts in a specific group and their contributions._ - not sure this is necessary
3. With that user logged in, go to any visible contact's Contributions tab and the Recurring Contributions sub tab
Current behaviour
----------------------------------------
The user is presented links to edit recurring contributions and clicking it also shows the form. Saving the form is also allowed.
Expected behaviour
----------------------------------------
Editing should not be allowed, i.e. there should be no _Edit_ link at all and opening the forms should result in a 404.
Environment information
----------------------------------------
* __CiviCRM:__ 5.24.5
* __CMS:__ Drupal 7.30
Comments
----------------------------------------
This seems to have been introduced as a regression with https://github.com/civicrm/civicrm-core/pull/13237 which originated in #571.
The compared contact ID is retrieved using `$this->getContactID()` which calls `CRM_Core_Form::setContactID()` which states the following in its docblock:
```php
/**
* Get contact if for a form object. Prioritise
* - cid in URL if 0 (on behalf on someoneelse)
* (@todo consider setting a variable if onbehalf for clarity of downstream 'if's
* - logged in user id if it matches the one in the cid in the URL
* - contact id validated from a checksum from a checksum
* - cid from the url if the caller has ACL permission to view
* - fallback is logged in user (or ? NULL if no logged in user) (@todo wouldn't 0 be more intuitive?)
*
* @return NULL|int
*/
```
The relevant part seems to be: __`cid from the url if the caller has ACL permission to view`__, but I couldn't verify yet, since it's a production system this is appearing on.
Background: The scenario is a _regional department_ user (being restricted to viewing contacts of a specific regional group only - which is done using ACLs), who should be allowed to view contributions, but not edit them at all.
Since the aforementioned issue tried to bypass access checks for editing one's own recurring contributions, I'm not sure this is a correct assumption at all. There should be a separate permission for controlling whether editing own recurring contributions is allowed.5.28.1https://lab.civicrm.org/dev/core/-/issues/1952Regression: Activities export results in DB error2020-08-15T02:36:42ZPradeep Nayakpradpnayak@gmail.comRegression: Activities export results in DB errorVersion: 5.28.0
Steps to replicate:
1. Find Activities
2. Select all activities (wont replicate if you select check box or limited activities)
3. Choose export activities action
Expected behaviour:
Should able to see export screen
Act...Version: 5.28.0
Steps to replicate:
1. Find Activities
2. Select all activities (wont replicate if you select check box or limited activities)
3. Choose export activities action
Expected behaviour:
Should able to see export screen
Actual Behaviour:
DB Error: no such field
Sql error detail:
```
Database Error Code: Unknown column 'activity_type.component_id' in 'where clause', 1054
Additional Details:
Array
(
[callback] => Array
(
[0] => CRM_Core_Error
[1] => handle
)
[code] => -19
[message] => DB Error: no such field
[mode] => 16
[debug_info] => SELECT ( civicrm_activity.id ), contact_a.id as contact_id, contact_a.contact_type as `contact_type`, contact_a.contact_sub_type as `contact_sub_type`, contact_a.sort_name as `sort_name`, contact_a.display_name as `display_name`, civicrm_activity.id as activity_id, civicrm_activity.activity_type_id, civicrm_activity.subject as activity_subject, civicrm_activity.activity_date_time as activity_date_time, 1, civicrm_activity.duration as activity_duration, civicrm_activity.location as activity_location, civicrm_activity.details as activity_details, civicrm_activity.source_record_id as source_record_id, civicrm_activity.is_test as activity_is_test, civicrm_activity.campaign_id as activity_campaign_id, civicrm_activity.engagement_level as activity_engagement_level, source_contact.sort_name as source_contact, activity_priority.label as activity_priority,
civicrm_activity.priority_id as priority_id, civicrm_activity.status_id as `status_id`, civicrm_activity.engagement_level as `engagement_level` FROM civicrm_contact contact_a LEFT JOIN civicrm_activity_contact
ON ( civicrm_activity_contact.contact_id = contact_a.id ) LEFT JOIN civicrm_activity
ON ( civicrm_activity.id = civicrm_activity_contact.activity_id
AND civicrm_activity.is_deleted = 0 AND civicrm_activity.is_current_revision = 1 ) INNER JOIN civicrm_contact
ON ( civicrm_activity_contact.contact_id = civicrm_contact.id and civicrm_contact.is_deleted != 1 ) LEFT JOIN civicrm_option_group option_group_activity_priority ON (option_group_activity_priority.name = 'priority') LEFT JOIN civicrm_option_value activity_priority ON (civicrm_activity.priority_id = activity_priority.value
AND option_group_activity_priority.id = activity_priority.option_group_id ) LEFT JOIN civicrm_activity AS parent_id ON civicrm_activity.id = parent_id.parent_id LEFT JOIN civicrm_activity_contact source_activity
ON (source_activity.activity_id = civicrm_activity_contact.activity_id
AND source_activity.record_type_id = 2)
LEFT JOIN civicrm_contact source_contact ON (source_activity.contact_id = source_contact.id) WHERE ( civicrm_activity.status_id IN ("1", "2") AND civicrm_activity.is_test = 0 ) AND (contact_a.is_deleted = 0) AND (civicrm_activity.activity_type_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 17, 19, 22, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 55)) AND (activity_type.component_id IS NULL OR activity_type.component_id <> 5) AND (activity_type.component_id IS NULL OR activity_type.component_id <> 6) AND (activity_type.component_id IS NULL OR activity_type.component_id <> 9) GROUP BY civicrm_activity.id ORDER BY `contact_a`.`sort_name` ASC, `contact_a`.`id` [nativecode=1054 ** Unknown column 'activity_type.component_id' in 'where clause']
[type] => DB_Error
[user_info] => SELECT ( civicrm_activity.id ), contact_a.id as contact_id, contact_a.contact_type as `contact_type`, contact_a.contact_sub_type as `contact_sub_type`, contact_a.sort_name as `sort_name`, contact_a.display_name as `display_name`, civicrm_activity.id as activity_id, civicrm_activity.activity_type_id, civicrm_activity.subject as activity_subject, civicrm_activity.activity_date_time as activity_date_time, 1, civicrm_activity.duration as activity_duration, civicrm_activity.location as activity_location, civicrm_activity.details as activity_details, civicrm_activity.source_record_id as source_record_id, civicrm_activity.is_test as activity_is_test, civicrm_activity.campaign_id as activity_campaign_id, civicrm_activity.engagement_level as activity_engagement_level, source_contact.sort_name as source_contact, activity_priority.label as activity_priority,
civicrm_activity.priority_id as priority_id, civicrm_activity.status_id as `status_id`, civicrm_activity.engagement_level as `engagement_level` FROM civicrm_contact contact_a LEFT JOIN civicrm_activity_contact
ON ( civicrm_activity_contact.contact_id = contact_a.id ) LEFT JOIN civicrm_activity
ON ( civicrm_activity.id = civicrm_activity_contact.activity_id
AND civicrm_activity.is_deleted = 0 AND civicrm_activity.is_current_revision = 1 ) INNER JOIN civicrm_contact
ON ( civicrm_activity_contact.contact_id = civicrm_contact.id and civicrm_contact.is_deleted != 1 ) LEFT JOIN civicrm_option_group option_group_activity_priority ON (option_group_activity_priority.name = 'priority') LEFT JOIN civicrm_option_value activity_priority ON (civicrm_activity.priority_id = activity_priority.value
AND option_group_activity_priority.id = activity_priority.option_group_id ) LEFT JOIN civicrm_activity AS parent_id ON civicrm_activity.id = parent_id.parent_id LEFT JOIN civicrm_activity_contact source_activity
ON (source_activity.activity_id = civicrm_activity_contact.activity_id
AND source_activity.record_type_id = 2)
LEFT JOIN civicrm_contact source_contact ON (source_activity.contact_id = source_contact.id) WHERE ( civicrm_activity.status_id IN ("1", "2") AND civicrm_activity.is_test = 0 ) AND (contact_a.is_deleted = 0) AND (civicrm_activity.activity_type_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 17, 19, 22, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 55)) AND (activity_type.component_id IS NULL OR activity_type.component_id <> 5) AND (activity_type.component_id IS NULL OR activity_type.component_id <> 6) AND (activity_type.component_id IS NULL OR activity_type.component_id <> 9) GROUP BY civicrm_activity.id ORDER BY `contact_a`.`sort_name` ASC, `contact_a`.`id` [nativecode=1054 ** Unknown column 'activity_type.component_id' in 'where clause']
[to_string] => [db_error: message="DB Error: no such field" code=-19 mode=callback callback=CRM_Core_Error::handle prefix="" info="SELECT ( civicrm_activity.id ), contact_a.id as contact_id, contact_a.contact_type as `contact_type`, contact_a.contact_sub_type as `contact_sub_type`, contact_a.sort_name as `sort_name`, contact_a.display_name as `display_name`, civicrm_activity.id as activity_id, civicrm_activity.activity_type_id, civicrm_activity.subject as activity_subject, civicrm_activity.activity_date_time as activity_date_time, 1, civicrm_activity.duration as activity_duration, civicrm_activity.location as activity_location, civicrm_activity.details as activity_details, civicrm_activity.source_record_id as source_record_id, civicrm_activity.is_test as activity_is_test, civicrm_activity.campaign_id as activity_campaign_id, civicrm_activity.engagement_level as activity_engagement_level, source_contact.sort_name as source_contact, activity_priority.label as activity_priority,
civicrm_activity.priority_id as priority_id, civicrm_activity.status_id as `status_id`, civicrm_activity.engagement_level as `engagement_level` FROM civicrm_contact contact_a LEFT JOIN civicrm_activity_contact
ON ( civicrm_activity_contact.contact_id = contact_a.id ) LEFT JOIN civicrm_activity
ON ( civicrm_activity.id = civicrm_activity_contact.activity_id
AND civicrm_activity.is_deleted = 0 AND civicrm_activity.is_current_revision = 1 ) INNER JOIN civicrm_contact
ON ( civicrm_activity_contact.contact_id = civicrm_contact.id and civicrm_contact.is_deleted != 1 ) LEFT JOIN civicrm_option_group option_group_activity_priority ON (option_group_activity_priority.name = 'priority') LEFT JOIN civicrm_option_value activity_priority ON (civicrm_activity.priority_id = activity_priority.value
AND option_group_activity_priority.id = activity_priority.option_group_id ) LEFT JOIN civicrm_activity AS parent_id ON civicrm_activity.id = parent_id.parent_id LEFT JOIN civicrm_activity_contact source_activity
ON (source_activity.activity_id = civicrm_activity_contact.activity_id
AND source_activity.record_type_id = 2)
LEFT JOIN civicrm_contact source_contact ON (source_activity.contact_id = source_contact.id) WHERE ( civicrm_activity.status_id IN ("1", "2") AND civicrm_activity.is_test = 0 ) AND (contact_a.is_deleted = 0) AND (civicrm_activity.activity_type_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 17, 19, 22, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 55)) AND (activity_type.component_id IS NULL OR activity_type.component_id <> 5) AND (activity_type.component_id IS NULL OR activity_type.component_id <> 6) AND (activity_type.component_id IS NULL OR activity_type.component_id <> 9) GROUP BY civicrm_activity.id ORDER BY `contact_a`.`sort_name` ASC, `contact_a`.`id` [nativecode=1054 ** Unknown column 'activity_type.component_id' in 'where clause']"]
)
```
Other information:
1. Can be replicated on https://dmaster.demo.civicrm.org/
2. Cannot replicate with user 15.28.1https://lab.civicrm.org/dev/core/-/issues/1953Credit card fields still required when a $0 option is selected on event regis...2020-08-14T23:18:25Zmark-rodgers11markrodgers11@gmail.comCredit card fields still required when a $0 option is selected on event registration/contribution pageOverview
----------------------------------------
When submitting an event registration (or contribution page form) with a $0 price option selected the form fails validation, despite credit card fields being hidden. I noticed this on a C...Overview
----------------------------------------
When submitting an event registration (or contribution page form) with a $0 price option selected the form fails validation, despite credit card fields being hidden. I noticed this on a CiviCRM website I manage, reproduced on the circle interactive demo site, also @KarinG reproduced this on yet another site.
https://chat.civicrm.org/civicrm/pl/aer7pqut5b85t8ab83ax3iko3o
Reproduction steps
----------------------------------------
1. Go to an event registration page (or contribution page)
2. Select $0 price option
3. Submit form
Current behaviour
----------------------------------------
![image](/uploads/198a46411385f82538500f2a1d34e940/image.png)
Expected behaviour
----------------------------------------
Credit card fields should not be required when they're hidden.
Environment information
----------------------------------------
* __Browser:__ Chrome 84.0.4147.89
* __CiviCRM:__ 5.28.0
* __PHP:__ 7.2.31
* __CMS:__ Drupal 7.72
* __Database:__ MySQL 5.7.31
* __Web Server:__ _Apache 2.4.46
Comments
----------------------------------------
Works as intended on CiviCRM 5.26.2 but not 5.28.05.28.1