CRM_Event_Form_Task_Register - Fix error "getFieldValue failed" (tentative)
authorTim Otten <totten@civicrm.org>
Tue, 8 Dec 2020 05:27:13 +0000 (21:27 -0800)
committerTim Otten <totten@civicrm.org>
Wed, 9 Dec 2020 01:18:04 +0000 (17:18 -0800)
When preparing the event-registration form, `CRM_Event_Page_Tab::preProcess()` looks up the designated contact ID and
calls `checkUserPermission()`.  The error message is (effectively) reporting that the permission-check fails because
there is no contact ID.

And this is a legit thing to complain about -- if you're embedding the event-registration form as part of a
search-task, then there is no *singular* contact ID.  (There is a potentially very long list of contact IDs - which is
probably stored/reported some other way.) The permission-check for this context seems like it ought to be different.

I labeled the commit (tentative) because I'm not entirely certain that I understand the contract of this
route/controller.  It has multiple overlapping use-cases, and I'm not certain if I've tracked them all.  However, this
patch does seem to fix the "getFieldValue failed" problem when running as a search-task.

CRM/Event/Form/Task/Register.php
CRM/Event/Page/Tab.php

index 5d1082c857fa2bc33bce39ac36eb83d8633f691d..6bdcb8ae204f4616a181788272e327b7ead74e6f 100644 (file)
@@ -76,7 +76,7 @@ class CRM_Event_Form_Task_Register extends CRM_Event_Form_Participant {
     $key = CRM_Core_Key::get('CRM_Event_Form_Participant', TRUE);
     $this->assign('participantQfKey', $key);
     $this->assign('participantAction', CRM_Core_Action::ADD);
-    $this->assign('urlPathVar', "_qf_Participant_display=true");
+    $this->assign('urlPathVar', "_qf_Participant_display=true&context=search");
   }
 
 }
index 0d039cdc1e3b40fb3a5db99f33760ec54290a287..47334d4af59cce3502a37d1b4e2e0689fa998e9e 100644 (file)
@@ -118,7 +118,7 @@ class CRM_Event_Page_Tab extends CRM_Core_Page {
     $this->_action = CRM_Utils_Request::retrieve('action', 'String', $this, FALSE, 'browse');
     $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this);
 
-    if ($context == 'standalone') {
+    if ($context == 'standalone' || $context === 'search') {
       $this->_action = CRM_Core_Action::ADD;
     }
     else {