From c7b3d063b3f333efd1548bf16e69dcab03bc0eeb Mon Sep 17 00:00:00 2001 From: Dave Greenberg Date: Mon, 28 Apr 2014 17:14:15 -0700 Subject: [PATCH] CRM-14492 - Show admin-only price fields on front end event info and event registration pages if the user is logged in and has administer CiviCRM permission. ---------------------------------------- * CRM-14492: https://issues.civicrm.org/jira/browse/CRM-14492 --- CRM/Event/Form/Registration/Register.php | 7 +++++++ CRM/Event/Page/EventInfo.php | 8 +++++++- CRM/Price/BAO/PriceSet.php | 7 +++++++ templates/CRM/Price/Form/PriceSet.tpl | 9 +++++++-- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/CRM/Event/Form/Registration/Register.php b/CRM/Event/Form/Registration/Register.php index 36b939fdce..ff605d2f5a 100644 --- a/CRM/Event/Form/Registration/Register.php +++ b/CRM/Event/Form/Registration/Register.php @@ -595,9 +595,16 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration { } $form->add('hidden', 'priceSetId', $form->_priceSetId); + // CRM-14492 Admin price fields should show up on event registration if user has 'administer CiviCRM' permissions + $adminFieldVisible = false; + if (CRM_Core_Permission::check('administer CiviCRM')) { + $adminFieldVisible = true; + } + foreach ($form->_feeBlock as $field) { // public AND admin visibility fields are included for back-office registration and back-office change selections if (CRM_Utils_Array::value('visibility', $field) == 'public' || + (CRM_Utils_Array::value('visibility', $field) == 'admin' && $adminFieldVisible == true) || $className == 'CRM_Event_Form_Participant' || $className == 'CRM_Event_Form_ParticipantFeeSelection' ) { diff --git a/CRM/Event/Page/EventInfo.php b/CRM/Event/Page/EventInfo.php index 95d8689fd9..2c2eff783c 100644 --- a/CRM/Event/Page/EventInfo.php +++ b/CRM/Event/Page/EventInfo.php @@ -119,10 +119,16 @@ class CRM_Event_Page_EventInfo extends CRM_Core_Page { $fieldCnt = 1; $visibility = CRM_Core_PseudoConstant::visibility('name'); + // CRM-14492 Admin price fields should show up on event registration if user has 'administer CiviCRM' permissions + $adminFieldVisible = false; + if (CRM_Core_Permission::check('administer CiviCRM')) { + $adminFieldVisible = true; + } + foreach ($priceSetFields as $fid => $fieldValues) { if (!is_array($fieldValues['options']) || empty($fieldValues['options']) || - CRM_Utils_Array::value('visibility_id', $fieldValues) != array_search('public', $visibility) + (CRM_Utils_Array::value('visibility_id', $fieldValues) != array_search('public', $visibility) && $adminFieldVisible == false) ) { continue; } diff --git a/CRM/Price/BAO/PriceSet.php b/CRM/Price/BAO/PriceSet.php index cbb35aeae8..d36047d098 100644 --- a/CRM/Price/BAO/PriceSet.php +++ b/CRM/Price/BAO/PriceSet.php @@ -832,8 +832,15 @@ WHERE id = %1"; // call the hook. CRM_Utils_Hook::buildAmount($component, $form, $feeBlock); + // CRM-14492 Admin price fields should show up on event registration if user has 'administer CiviCRM' permissions + $adminFieldVisible = false; + if (CRM_Core_Permission::check('administer CiviCRM')) { + $adminFieldVisible = true; + } + foreach ($feeBlock as $id => $field) { if (CRM_Utils_Array::value('visibility', $field) == 'public' || + (CRM_Utils_Array::value('visibility', $field) == 'admin' && $adminFieldVisible == true) || !$validFieldsOnly ) { $options = CRM_Utils_Array::value('options', $field); diff --git a/templates/CRM/Price/Form/PriceSet.tpl b/templates/CRM/Price/Form/PriceSet.tpl index 47d1437954..a345302937 100644 --- a/templates/CRM/Price/Form/PriceSet.tpl +++ b/templates/CRM/Price/Form/PriceSet.tpl @@ -28,9 +28,14 @@
{$priceSet.help_pre}
{/if} + {assign var='adminFld' value=false} + {if call_user_func(array('CRM_Core_Permission','check'), 'administer CiviCRM') } + {assign var='adminFld' value=true} + {/if} + {foreach from=$priceSet.fields item=element key=field_id} - {* Skip 'Admin' visibility price fields WHEN this tpl is used in online registration. *} - {if $element.visibility EQ 'public' || $context eq 'standalone' || $context eq 'advanced' || $context eq 'search' || $context eq 'participant' || $context eq 'dashboard' || $action eq 1024} + {* Skip 'Admin' visibility price fields WHEN this tpl is used in online registration unless user has administer CiviCRM permission. *} + {if $element.visibility EQ 'public' || ($element.visibility EQ 'admin' && $adminFld EQ true) || $context eq 'standalone' || $context eq 'advanced' || $context eq 'search' || $context eq 'participant' || $context eq 'dashboard' || $action eq 1024}
{if ($element.html_type eq 'CheckBox' || $element.html_type == 'Radio') && $element.options_per_line} {assign var="element_name" value="price_"|cat:$field_id} -- 2.25.1