/** * Get file url. * * @param int $contactID * @param int $cfID * @param int $fileID * @param bool $absolute * * @param string $multiRecordWhereClause * * @return array */ public static function getFileURL($contactID, $cfID, $fileID = NULL, $absolute = FALSE, $multiRecordWhereClause = NULL) { if ($contactID) { if (!$fileID) { $params = array('id' => $cfID); $defaults = array(); CRM_Core_DAO::commonRetrieve('CRM_Core_DAO_CustomField', $params, $defaults); $columnName = $defaults['column_name']; //table name of custom data $tableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $defaults['custom_group_id'], 'table_name', 'id'); //query to fetch id from civicrm_file if ($multiRecordWhereClause) { $query = "SELECT {$columnName} FROM {$tableName} where entity_id = {$contactID} AND {$multiRecordWhereClause}"; } else { $query = "SELECT {$columnName} FROM {$tableName} where entity_id = {$contactID}"; } $fileID = CRM_Core_DAO::singleValueQuery($query); } $result = array(); if ($fileID) { $fileType = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_File', $fileID, 'mime_type', 'id'); $result['file_id'] = $fileID; if ($fileType == 'image/jpeg' || $fileType == 'image/pjpeg' || $fileType == 'image/gif' || $fileType == 'image/x-png' || $fileType == 'image/png') { $entityId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_EntityFile', $fileID, 'entity_id', 'id'); list($path) = CRM_Core_BAO_File::path($fileID, $entityId, NULL, NULL); $url = CRM_Utils_System::url('civicrm/file', "reset=1&id={$fileID}&eid={$contactID}", $absolute, NULL, TRUE, TRUE); $result['file_url'] = CRM_Utils_File::getFileURL($path, $fileType, $url); } else { $uri = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_File', $fileID, 'uri'); $url = CRM_Utils_System::url('civicrm/file', "reset=1&id={$fileID}&eid={$contactID}", $absolute, NULL, TRUE, TRUE); $result['file_url'] = CRM_Utils_File::getFileURL($uri, $fileType, $url); } } return $result; } }
/** * Add the custom fields. * * @param int $id * @param string $name * @param bool $viewOnly * @param null $profileContactType * @param array $fieldTypes */ public function buildCustom($id, $name, $viewOnly = FALSE, $profileContactType = NULL, $fieldTypes = NULL) { if ($id) { $contactID = $this->getContactID(); // we don't allow conflicting fields to be // configured via profile - CRM 2100 $fieldsToIgnore = array('receive_date' => 1, 'trxn_id' => 1, 'invoice_id' => 1, 'net_amount' => 1, 'fee_amount' => 1, 'non_deductible_amount' => 1, 'total_amount' => 1, 'amount_level' => 1, 'contribution_status_id' => 1, 'payment_instrument' => 1, 'check_number' => 1, 'financial_type' => 1); $fields = CRM_Core_BAO_UFGroup::getFields($id, FALSE, CRM_Core_Action::ADD, NULL, NULL, FALSE, NULL, FALSE, NULL, CRM_Core_Permission::CREATE, NULL); if ($fields) { // unset any email-* fields since we already collect it, CRM-2888 foreach (array_keys($fields) as $fieldName) { if (substr($fieldName, 0, 6) == 'email-' && !in_array($profileContactType, array('honor', 'onbehalf'))) { unset($fields[$fieldName]); } } if (array_intersect_key($fields, $fieldsToIgnore)) { $fields = array_diff_key($fields, $fieldsToIgnore); CRM_Core_Session::setStatus(ts('Some of the profile fields cannot be configured for this page.'), ts('Warning'), 'alert'); } //remove common fields only if profile is not configured for onbehalf/honor if (!in_array($profileContactType, array('honor', 'onbehalf'))) { $fields = array_diff_assoc($fields, $this->_fields); } CRM_Core_BAO_Address::checkContactSharedAddressFields($fields, $contactID); $addCaptcha = FALSE; // fetch file preview when not submitted yet, like in online contribution Confirm and ThankYou page $viewOnlyFileValues = empty($profileContactType) ? array() : array($profileContactType => array()); foreach ($fields as $key => $field) { if ($viewOnly && isset($field['data_type']) && $field['data_type'] == 'File' || $viewOnly && $field['name'] == 'image_URL') { //retrieve file value from submitted values on basis of $profileContactType $fileValue = CRM_Utils_Array::value($key, $this->_params); if (!empty($profileContactType) && !empty($this->_params[$profileContactType])) { $fileValue = CRM_Utils_Array::value($key, $this->_params[$profileContactType]); } if ($fileValue) { $path = CRM_Utils_Array::value('name', $fileValue); $fileType = CRM_Utils_Array::value('type', $fileValue); $fileValue = CRM_Utils_File::getFileURL($path, $fileType); } // format custom file value fetched from submitted value if ($profileContactType) { $viewOnlyFileValues[$profileContactType][$key] = $fileValue; } else { $viewOnlyFileValues[$key] = $fileValue; } } if ($profileContactType) { //Since we are showing honoree name separately so we are removing it from honoree profile just for display if ($profileContactType == 'honor') { $honoreeNamefields = array('prefix_id', 'first_name', 'last_name', 'suffix_id', 'organization_name', 'household_name'); if (in_array($field['name'], $honoreeNamefields)) { unset($fields[$field['name']]); continue; } } if (!empty($fieldTypes) && in_array($field['field_type'], $fieldTypes)) { CRM_Core_BAO_UFGroup::buildProfile($this, $field, CRM_Profile_Form::MODE_CREATE, $contactID, TRUE, $profileContactType); $this->_fields[$profileContactType][$key] = $field; } else { unset($fields[$key]); } } else { CRM_Core_BAO_UFGroup::buildProfile($this, $field, CRM_Profile_Form::MODE_CREATE, $contactID, TRUE); $this->_fields[$key] = $field; } // CRM-11316 Is ReCAPTCHA enabled for this profile AND is this an anonymous visitor if ($field['add_captcha'] && !$this->_userID) { $addCaptcha = TRUE; } } $this->assign($name, $fields); if ($profileContactType && count($viewOnlyFileValues[$profileContactType])) { $this->assign('viewOnlyPrefixFileValues', $viewOnlyFileValues); } elseif (count($viewOnlyFileValues)) { $this->assign('viewOnlyFileValues', $viewOnlyFileValues); } if ($addCaptcha && !$viewOnly) { $captcha = CRM_Utils_ReCAPTCHA::singleton(); $captcha->add($this); $this->assign('isCaptcha', TRUE); } } } }