/** * Format a list of UFFields for use with buildProfile. This is the in-memory analog * of getFields(). * * @param array $groupArr * (mimic CRM_UF_DAO_UFGroup). * @param array $fieldArrs * List of fields (each mimics CRM_UF_DAO_UFField). * @param bool $visibility * Visibility of fields we are interested in. * @param bool $searchable * @param bool $showAll * @param null $ctype * @param int $permissionType * * @return array * @see self::getFields */ public static function formatUFFields($groupArr, $fieldArrs, $visibility = NULL, $searchable = NULL, $showAll = FALSE, $ctype = NULL, $permissionType = CRM_Core_Permission::CREATE) { // $group = new CRM_Core_DAO_UFGroup(); // $group->copyValues($groupArr); // no... converts string('') to string('null') $group = (object) $groupArr; // Refactoring note: The $fieldArrs here may be slightly different than the $ufFields // used by calculateGroupType, but I don't think the missing fields matter, and -- if // they did -- the obvious fix would produce mutual recursion. $ufGroupType = self::_calculateGroupType($fieldArrs); $profileType = CRM_Core_BAO_UFField::calculateProfileType(implode(',', $ufGroupType)); $contactActivityProfile = CRM_Core_BAO_UFField::checkContactActivityProfileTypeByGroupType(implode(',', $ufGroupType)); $importableFields = self::getImportableFields($showAll, $profileType, $contactActivityProfile); list($customFields, $addressCustomFields) = self::getCustomFields($ctype); $formattedFields = array(); foreach ($fieldArrs as $fieldArr) { $field = (object) $fieldArr; if (!self::filterUFField($field, $searchable, $showAll, $visibility)) { continue; } list($name, $formattedField) = self::formatUFField($group, $field, $customFields, $addressCustomFields, $importableFields, $permissionType); if ($formattedField !== NULL) { $formattedFields[$name] = $formattedField; } } return $formattedFields; }