'com.megaphonetech.softcreditcustomfields', 'name' => 'softCreditCustomfield', 'update' => 'never', 'entity' => 'OptionValue', 'params' => [ 'label' => ts('Contribution Soft'), 'name' => 'civicrm_contribution_soft', 'value' => 'ContributionSoft', 'option_group_id' => 'cg_extend_objects', 'options' => ['match' => ['option_group_id', 'name']], 'is_active' => 1, 'version' => 3, ], ]; } /** * Implements hook_civicrm_caseTypes(). * * Generate a list of case-types. * * Note: This hook only runs in CiviCRM 4.4+. * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes */ function softcreditcustomfields_civicrm_caseTypes(&$caseTypes) { _softcreditcustomfields_civix_civicrm_caseTypes($caseTypes); } /** * Implements hook_civicrm_angularModules(). * * Generate a list of Angular modules. * * Note: This hook only runs in CiviCRM 4.5+. It may * use features only available in v4.6+. * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_angularModules */ function softcreditcustomfields_civicrm_angularModules(&$angularModules) { _softcreditcustomfields_civix_civicrm_angularModules($angularModules); } /** * Implements hook_civicrm_alterSettingsFolders(). * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders */ function softcreditcustomfields_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { _softcreditcustomfields_civix_civicrm_alterSettingsFolders($metaDataFolders); } /** * Implements hook_civicrm_entityTypes(). * * Declare entity types provided by this module. * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_entityTypes */ function softcreditcustomfields_civicrm_entityTypes(&$entityTypes) { _softcreditcustomfields_civix_civicrm_entityTypes($entityTypes); } /** * Implements hook_civicrm_buildForm(). * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_buildForm */ function softcreditcustomfields_civicrm_buildForm($formName, &$form) { if ('CRM_Contribute_Form_ContributionView' == $formName) { $softCredits = $form->get_template_vars('softContributions'); if (!empty($softCredits)) { $softCreditIds = []; foreach ($softCredits as $key => $softCredit) { $softCreditIds[] = $softCredit['soft_credit_id']; // add custom data of type soft credit $groupTree = CRM_Core_BAO_CustomGroup::getTree('ContributionSoft', NULL, $softCredit['soft_credit_id']); // we setting the prefix to dnc_ below so that we don't overwrite smarty's grouptree var. $softCredits[$key]['custom'] = CRM_Core_BAO_CustomGroup::buildCustomDataView($form, $groupTree, FALSE, NULL, "dnc_"); } $form->assign('softContributions', $softCredits); $form->assign('softCreditIds', json_encode($softCreditIds)); CRM_Core_Region::instance('page-footer')->add(array( 'template' => "CRM/Contribute/Page/View/SoftCredit-Custom.tpl", )); } } if ('CRM_Contribute_Form_Contribution' == $formName && !($form->getVar('_action') & CRM_Core_Action::DELETE)) { CRM_Core_Region::instance('page-footer')->add(array( 'template' => "CRM/Contribute/Form/SoftCredit-Custom.tpl", )); for ($blockId = 1; $blockId <= 10; $blockId++) { $entityId = CRM_Utils_Array::value( 'soft_credit_id', CRM_Utils_Array::value( $blockId, CRM_Utils_Array::value('soft_credit', $form->_softCreditInfo) ) ); _softcreditcustomfields_addCustomDataToForm($form, $entityId, $blockId); } } } /** * Add custom data to the form. * * @param CRM_Core_Form $form * @param int $entityId * @param int $blockId */ function _softcreditcustomfields_addCustomDataToForm(&$form, $entityId, $blockId) { $groupTree = CRM_Core_BAO_CustomGroup::getTree('ContributionSoft', NULL, $entityId); if (isset($groupTree) && is_array($groupTree)) { // use simplified formatted groupTree $groupTree = CRM_Core_BAO_CustomGroup::formatGroupTree($groupTree, 1, $form); // make sure custom fields are added /w element-name in the format - 'soft_credit_amount[$blockId][custom-X]' foreach ($groupTree as $id => $group) { foreach ($group['fields'] as $fldId => $field) { $groupTree[$id]['fields'][$fldId]['element_custom_name'] = $field['element_name']; $groupTree[$id]['fields'][$fldId]['element_name'] = "soft_credit[$blockId][{$field['element_name']}]"; } } $defaults = []; CRM_Core_BAO_CustomGroup::setDefaults($groupTree, $defaults); // since we change element name for softCredit custom data, we need to format the setdefault values $softCreditDefaults = []; foreach ($defaults as $key => $val) { if (empty($val)) { continue; } // inorder to set correct defaults for checkbox custom data, we need to converted flat key to array // this works for all types custom data $keyValues = explode('[', str_replace(']', '', $key)); $softCreditDefaults[$keyValues[0]][$keyValues[1]][$keyValues[2]] = $val; } $form->setDefaults($softCreditDefaults); // we setting the prefix to 'dnc_' below, so that we don't overwrite smarty's grouptree var. // And we can't set it to 'soft_credit_' because we want to set it in a slightly different format. CRM_Core_BAO_CustomGroup::buildQuickForm($form, $groupTree, FALSE, 'dnc_'); // during contact editing : if no softCredit is filled // required custom data must not produce 'required' form rule error // more handling done in formRule func //self::storeRequiredCustomDataInfo($form, $groupTree); $tplGroupTree = CRM_Core_Smarty::singleton() ->get_template_vars('soft_credit_groupTree'); $tplGroupTree = empty($tplGroupTree) ? [] : $tplGroupTree; $form->assign('soft_credit_groupTree', $tplGroupTree + [$blockId => $groupTree]); // unset the temp smarty var that got created $form->assign('dnc_groupTree', NULL); } // softCredit custom data processing ends .. }