本文整理汇总了PHP中CRM_Contact_BAO_ContactType::isaSubType方法的典型用法代码示例。如果您正苦于以下问题:PHP CRM_Contact_BAO_ContactType::isaSubType方法的具体用法?PHP CRM_Contact_BAO_ContactType::isaSubType怎么用?PHP CRM_Contact_BAO_ContactType::isaSubType使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CRM_Contact_BAO_ContactType
的用法示例。
在下文中一共展示了CRM_Contact_BAO_ContactType::isaSubType方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: formatProfileContactParams
/**
* Format profile contact parameters.
*
* @param array $params
* @param $fields
* @param int $contactID
* @param int $ufGroupId
* @param null $ctype
* @param bool $skipCustom
*
* @return array
*/
public static function formatProfileContactParams(&$params, &$fields, $contactID = NULL, $ufGroupId = NULL, $ctype = NULL, $skipCustom = FALSE)
{
$data = $contactDetails = array();
// get the contact details (hier)
if ($contactID) {
list($details, $options) = self::getHierContactDetails($contactID, $fields);
$contactDetails = $details[$contactID];
$data['contact_type'] = CRM_Utils_Array::value('contact_type', $contactDetails);
$data['contact_sub_type'] = CRM_Utils_Array::value('contact_sub_type', $contactDetails);
} else {
//we should get contact type only if contact
if ($ufGroupId) {
$data['contact_type'] = CRM_Core_BAO_UFField::getProfileType($ufGroupId);
//special case to handle profile with only contact fields
if ($data['contact_type'] == 'Contact') {
$data['contact_type'] = 'Individual';
} elseif (CRM_Contact_BAO_ContactType::isaSubType($data['contact_type'])) {
$data['contact_type'] = CRM_Contact_BAO_ContactType::getBasicType($data['contact_type']);
}
} elseif ($ctype) {
$data['contact_type'] = $ctype;
} else {
$data['contact_type'] = 'Individual';
}
}
//fix contact sub type CRM-5125
if (array_key_exists('contact_sub_type', $params) && !empty($params['contact_sub_type'])) {
$data['contact_sub_type'] = CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR, (array) $params['contact_sub_type']) . CRM_Core_DAO::VALUE_SEPARATOR;
} elseif (array_key_exists('contact_sub_type_hidden', $params) && !empty($params['contact_sub_type_hidden'])) {
// if profile was used, and had any subtype, we obtain it from there
$data['contact_sub_type'] = CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR, (array) $params['contact_sub_type_hidden']) . CRM_Core_DAO::VALUE_SEPARATOR;
}
if ($ctype == 'Organization') {
$data['organization_name'] = CRM_Utils_Array::value('organization_name', $contactDetails);
} elseif ($ctype == 'Household') {
$data['household_name'] = CRM_Utils_Array::value('household_name', $contactDetails);
}
$locationType = array();
$count = 1;
if ($contactID) {
//add contact id
$data['contact_id'] = $contactID;
$primaryLocationType = self::getPrimaryLocationType($contactID);
} else {
$defaultLocation = CRM_Core_BAO_LocationType::getDefault();
$defaultLocationId = $defaultLocation->id;
}
// get the billing location type
$locationTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id', array(), 'validate');
$billingLocationTypeId = array_search('Billing', $locationTypes);
$blocks = array('email', 'phone', 'im', 'openid');
$multiplFields = array('url');
// prevent overwritten of formatted array, reset all block from
// params if it is not in valid format (since import pass valid format)
foreach ($blocks as $blk) {
if (array_key_exists($blk, $params) && !is_array($params[$blk])) {
unset($params[$blk]);
}
}
$primaryPhoneLoc = NULL;
$session = CRM_Core_Session::singleton();
foreach ($params as $key => $value) {
$fieldName = $locTypeId = $typeId = NULL;
list($fieldName, $locTypeId, $typeId) = CRM_Utils_System::explode('-', $key, 3);
//store original location type id
$actualLocTypeId = $locTypeId;
if ($locTypeId == 'Primary') {
if ($contactID) {
if (in_array($fieldName, $blocks)) {
$locTypeId = self::getPrimaryLocationType($contactID, FALSE, $fieldName);
} else {
$locTypeId = self::getPrimaryLocationType($contactID, FALSE, 'address');
}
$primaryLocationType = $locTypeId;
} else {
$locTypeId = $defaultLocationId;
}
}
if (is_numeric($locTypeId) && !in_array($fieldName, $multiplFields) && substr($fieldName, 0, 7) != 'custom_') {
$index = $locTypeId;
if (is_numeric($typeId)) {
$index .= '-' . $typeId;
}
if (!in_array($index, $locationType)) {
$locationType[$count] = $index;
$count++;
}
$loc = CRM_Utils_Array::key($index, $locationType);
//.........这里部分代码省略.........
示例2: buildProfile
//.........这里部分代码省略.........
} else {
$orgInfo = $select + $orgInfo;
}
$sel->setOptions(array($orgInfo, $types));
} elseif (CRM_Utils_Array::value('name', $field) == 'membership_status') {
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Member_PseudoConstant::membershipStatus(NULL, NULL, 'label'), $required);
} elseif (in_array($fieldName, array('gender_id', 'communication_style_id'))) {
$options = array();
$pseudoValues = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', $fieldName);
foreach ($pseudoValues as $key => $var) {
$options[$key] = $form->createElement('radio', NULL, ts($title), $var, $key);
}
$group = $form->addGroup($options, $name, $title);
if ($required) {
$form->addRule($name, ts('%1 is a required field.', array(1 => $title)), 'required');
} else {
$group->setAttribute('allowClear', TRUE);
}
} elseif ($fieldName === 'prefix_id' || $fieldName === 'suffix_id') {
$form->addSelect($name, array('label' => $title, 'entity' => 'contact', 'field' => $fieldName, 'class' => 'six', 'placeholder' => ''), $required);
} elseif ($fieldName === 'contact_sub_type') {
$gId = $form->get('gid') ? $form->get('gid') : CRM_Utils_Array::value('group_id', $field);
if ($usedFor == 'onbehalf') {
$profileType = 'Organization';
} elseif ($usedFor == 'honor') {
$profileType = CRM_Core_BAO_UFField::getProfileType($form->_params['honoree_profile_id']);
} else {
$profileType = $gId ? CRM_Core_BAO_UFField::getProfileType($gId) : NULL;
if ($profileType == 'Contact') {
$profileType = 'Individual';
}
}
$setSubtype = FALSE;
if (CRM_Contact_BAO_ContactType::isaSubType($profileType)) {
$setSubtype = $profileType;
$profileType = CRM_Contact_BAO_ContactType::getBasicType($profileType);
}
$subtypes = $profileType ? CRM_Contact_BAO_ContactType::subTypePairs($profileType) : array();
if ($setSubtype) {
$subtypeList = array();
$subtypeList[$setSubtype] = $subtypes[$setSubtype];
} else {
$subtypeList = $subtypes;
}
$form->add('select', $name, $title, $subtypeList, $required, array('class' => 'crm-select2', 'multiple' => TRUE));
} elseif (in_array($fieldName, CRM_Contact_BAO_Contact::$_greetingTypes)) {
//add email greeting, postal greeting, addressee, CRM-4575
$gId = $form->get('gid') ? $form->get('gid') : CRM_Utils_Array::value('group_id', $field);
$profileType = CRM_Core_BAO_UFField::getProfileType($gId, TRUE, FALSE, TRUE);
if (empty($profileType) || in_array($profileType, array('Contact', 'Contribution', 'Participant', 'Membership'))) {
$profileType = 'Individual';
}
if (CRM_Contact_BAO_ContactType::isaSubType($profileType)) {
$profileType = CRM_Contact_BAO_ContactType::getBasicType($profileType);
}
$greeting = array('contact_type' => $profileType, 'greeting_type' => $fieldName);
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Core_PseudoConstant::greeting($greeting), $required);
// add custom greeting element
$form->add('text', $fieldName . '_custom', ts('Custom %1', array(1 => ucwords(str_replace('_', ' ', $fieldName)))), NULL, FALSE);
} elseif ($fieldName === 'preferred_communication_method') {
$communicationFields = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'preferred_communication_method');
foreach ($communicationFields as $key => $var) {
if ($key == '') {
continue;
}
$communicationOptions[] = $form->createElement('checkbox', $key, NULL, $var);
示例3: postProcess
/**
* Process the user submitted custom data values.
*
*
* @return void
*/
public function postProcess()
{
$params = $this->controller->exportValues($this->_name);
//if the delete record button is clicked
if ($this->_deleteButtonName) {
if (!empty($_POST[$this->_deleteButtonName]) && $this->_recordId) {
$filterParams['id'] = $this->_customGroupId;
$returnProperties = array('is_multiple', 'table_name');
CRM_Core_DAO::commonRetrieve("CRM_Core_DAO_CustomGroup", $filterParams, $returnValues, $returnProperties);
if (!empty($returnValues['is_multiple'])) {
if ($tableName = CRM_Utils_Array::value('table_name', $returnValues)) {
$sql = "DELETE FROM {$tableName} WHERE id = %1 AND entity_id = %2";
$sqlParams = array(1 => array($this->_recordId, 'Integer'), 2 => array($this->_id, 'Integer'));
CRM_Core_DAO::executeQuery($sql, $sqlParams);
CRM_Core_Session::setStatus(ts('Your record has been deleted.'), ts('Deleted'), 'success');
}
}
return;
}
}
CRM_Utils_Hook::processProfile($this->_ufGroup['name']);
if (!empty($params['image_URL'])) {
CRM_Contact_BAO_Contact::processImageParams($params);
}
$greetingTypes = array('addressee' => 'addressee_id', 'email_greeting' => 'email_greeting_id', 'postal_greeting' => 'postal_greeting_id');
$details = array();
if ($this->_id) {
$contactDetails = CRM_Contact_BAO_Contact::getHierContactDetails($this->_id, $greetingTypes);
$details = $contactDetails[0][$this->_id];
}
if (!(!empty($details['addressee_id']) || !empty($details['email_greeting_id']) || CRM_Utils_Array::value('postal_greeting_id', $details))) {
$profileType = CRM_Core_BAO_UFField::getProfileType($this->_gid);
//Though Profile type is contact we need
//Individual/Household/Organization for setting Greetings.
if ($profileType == 'Contact') {
$profileType = 'Individual';
//if we editing Household/Organization.
if ($this->_id) {
$profileType = CRM_Contact_BAO_Contact::getContactType($this->_id);
}
}
if (CRM_Contact_BAO_ContactType::isaSubType($profileType)) {
$profileType = CRM_Contact_BAO_ContactType::getBasicType($profileType);
}
foreach ($greetingTypes as $key => $value) {
if (!array_key_exists($key, $params)) {
$params[$key] = CRM_Contact_BAO_Contact_Utils::defaultGreeting($profileType, $key);
}
}
}
$transaction = new CRM_Core_Transaction();
//used to send subscribe mail to the group which user want.
//if the profile double option in is enabled
$mailingType = array();
$result = NULL;
foreach ($params as $name => $values) {
if (substr($name, 0, 6) == 'email-') {
$result['email'] = $values;
}
}
//array of group id, subscribed by contact
$contactGroup = array();
if (!empty($params['group']) && CRM_Core_BAO_UFGroup::isProfileDoubleOptin()) {
$groupSubscribed = array();
if (!empty($result['email'])) {
if ($this->_id) {
$contactGroups = new CRM_Contact_DAO_GroupContact();
$contactGroups->contact_id = $this->_id;
$contactGroups->status = 'Added';
$contactGroups->find();
$contactGroup = array();
while ($contactGroups->fetch()) {
$contactGroup[] = $contactGroups->group_id;
$groupSubscribed[$contactGroups->group_id] = 1;
}
}
foreach ($params['group'] as $key => $val) {
if (!$val) {
unset($params['group'][$key]);
continue;
}
$groupTypes = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Group', $key, 'group_type', 'id');
$groupType = explode(CRM_Core_DAO::VALUE_SEPARATOR, substr($groupTypes, 1, -1));
//filter group of mailing type and unset it from params
if (in_array(2, $groupType)) {
//if group is already subscribed , ignore it
$groupExist = CRM_Utils_Array::key($key, $contactGroup);
if (!isset($groupExist)) {
$mailingType[] = $key;
unset($params['group'][$key]);
}
}
}
}
//.........这里部分代码省略.........
示例4: formRule
//.........这里部分代码省略.........
if ($customFieldId[0] == 'custom') {
$customField =& new CRM_Core_DAO_CustomField();
$customField->id = $customFieldId[1];
$customField->find(true);
if (!$customField->is_active && $is_active) {
$errors['field_name'] = ts('Cannot set this field "Active" since the selected custom field is disabled.');
}
}
}
//check profile is configured for double option process
//adding group field, email field should be present in the group
//fixed for issue CRM-2861 & CRM-4153
$config =& CRM_Core_Config::singleton();
if ($config->profileDoubleOptIn) {
if ($fields['field_name'][1] == 'group') {
require_once 'CRM/Core/BAO/UFField.php';
$dao =& new CRM_Core_BAO_UFField();
$dao->uf_group_id = $fields['group_id'];
$dao->find();
$emailField = false;
while ($dao->fetch()) {
//check email field is present in the group
if ($dao->field_name == 'email') {
$emailField = true;
}
}
if (!$emailField) {
$disableSetting = "define( 'CIVICRM_PROFILE_DOUBLE_OPTIN' , 0 );";
$errors['field_name'] = ts('Your site is currently configured to require double-opt in when users join (subscribe) to Group(s) via a Profile form. In this mode, you need to include an Email field in a Profile BEFORE you can add the Group(s) field. This ensures that an opt-in confirmation email can be sent. Your site administrator can disable double opt-in by adding this line to the CiviCRM settings file: <em>%1</em>', array(1 => $disableSetting));
}
}
}
//fix for CRM-3037
$fieldType = $fields['field_name'][0];
//get the group type.
$groupType = CRM_Core_BAO_UFGroup::calculateGroupType($self->_gid, CRM_Utils_Array::value('field_id', $fields));
switch ($fieldType) {
case 'Individual':
if (in_array('Household', $groupType) || in_array('Organization', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Individual with combination of Household or Organization');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
case 'Household':
if (in_array('Individual', $groupType) || in_array('Organization', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Household with combination of Individual or Organization');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
case 'Organization':
if (in_array('Household', $groupType) || in_array('Individual', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Organization with combination of Household or Individual');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
case 'Participant':
if (in_array('Membership', $groupType) || in_array('Contribution', $groupType) || in_array('Organization', $groupType) || in_array('Household', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Participant with combination of Membership or Contribution or Household or Organization');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
case 'Contribution':
if (in_array('Participant', $groupType) || in_array('Membership', $groupType) || in_array('Organization', $groupType) || in_array('Household', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Contribution with combination of Membership or Participant or Household or Organization');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
case 'Membership':
if (in_array('Participant', $groupType) || in_array('Contribution', $groupType) || in_array('Organization', $groupType) || in_array('Household', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Membership with combination of Participant or Contribution or Household or Organization');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
default:
$profileType = CRM_Core_BAO_UFField::getProfileType($fields['group_id'], true, false, true);
if (CRM_Contact_BAO_ContactType::isaSubType($fieldType)) {
if (CRM_Contact_BAO_ContactType::isaSubType($profileType)) {
if ($fieldType != $profileType) {
$errors['field_name'] = ts('Cannot add or update profile field type "%1" with combination
of "%2".', array(1 => $fieldType, 2 => $profileType));
}
} else {
$basicType = CRM_Contact_BAO_ContactType::getBasicType($fieldType);
if ($profileType && $profileType != $basicType && $profileType != 'Contact') {
$errors['field_name'] = ts('Cannot add or update profile field type "%1" with combination
of "%2".', array(1 => $fieldType, 2 => $profileType));
}
}
} elseif ($fields['field_name'][1] == 'contact_sub_type' && !in_array($profileType, array('Individual', 'Household', 'Organization')) && !in_array($profileType, CRM_Contact_BAO_ContactType::subTypes())) {
$errors['field_name'] = ts('Cannot add or update profile field Contact Subtype as profile type is not one of Individual, Household or Organization.');
}
}
return empty($errors) ? true : $errors;
}
示例5: buildProfile
/**
* Function to build profile form
*
* @params object $form form object
* @params array $field array field properties
* @params int $mode profile mode
* @params int $contactID contact id
*
* @return null
* @static
* @access public
*/
static function buildProfile(&$form, &$field, $mode, $contactId = null, $online = false)
{
require_once "CRM/Profile/Form.php";
require_once "CRM/Core/OptionGroup.php";
require_once 'CRM/Core/BAO/UFField.php';
require_once 'CRM/Contact/BAO/ContactType.php';
$defaultValues = array();
$fieldName = $field['name'];
$title = $field['title'];
$attributes = $field['attributes'];
$rule = $field['rule'];
$view = $field['is_view'];
$required = $mode == CRM_Profile_Form::MODE_SEARCH ? false : $field['is_required'];
$search = $mode == CRM_Profile_Form::MODE_SEARCH ? true : false;
// do not display view fields in drupal registration form
// CRM-4632
if ($view && $mode == CRM_Profile_Form::MODE_REGISTER) {
return;
}
if ($contactId && !$online) {
$name = "field[{$contactId}][{$fieldName}]";
} else {
$name = $fieldName;
}
require_once 'CRM/Core/BAO/Preferences.php';
$addressOptions = CRM_Core_BAO_Preferences::valueOptions('address_options', true, null, true);
if (substr($fieldName, 0, 14) === 'state_province') {
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Core_PseudoConstant::stateProvince(), $required);
} else {
if (substr($fieldName, 0, 7) === 'country') {
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Core_PseudoConstant::country(), $required);
$config =& CRM_Core_Config::singleton();
if (!in_array($mode, array(CRM_Profile_Form::MODE_EDIT, CRM_Profile_Form::MODE_SEARCH)) && $config->defaultContactCountry) {
$defaultValues[$name] = $config->defaultContactCountry;
$form->setDefaults($defaultValues);
}
} else {
if (substr($fieldName, 0, 6) === 'county') {
if ($addressOptions['county']) {
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Core_PseudoConstant::county(), $required);
}
} else {
if (substr($fieldName, 0, 2) === 'im') {
if (!$contactId) {
$form->add('select', $name . '-provider_id', $title, array('' => ts('- select -')) + CRM_Core_PseudoConstant::IMProvider(), $required);
if ($view && $mode != CRM_Profile_Form::MODE_SEARCH) {
$form->freeze($name . "-provider_id");
}
}
$form->add('text', $name, $title, $attributes, $required);
} else {
if ($fieldName === 'birth_date' || $fieldName === 'deceased_date') {
$form->addDate($name, $title, $required, array('formatType' => 'birth'));
} else {
if (in_array($fieldName, array("membership_start_date", "membership_end_date", "join_date"))) {
$form->addDate($name, $title, $required, array('formatType' => 'custom'));
} else {
if ($field['name'] == 'membership_type_id') {
require_once 'CRM/Member/PseudoConstant.php';
$form->add('select', 'membership_type_id', $title, array('' => ts('- select -')) + CRM_Member_PseudoConstant::membershipType(), $required);
} else {
if ($field['name'] == 'status_id') {
require_once 'CRM/Member/PseudoConstant.php';
$form->add('select', 'status_id', $title, array('' => ts('- select -')) + CRM_Member_PseudoConstant::membershipStatus(), $required);
} else {
if ($fieldName === 'gender') {
$genderOptions = array();
$gender = CRM_Core_PseudoConstant::gender();
foreach ($gender as $key => $var) {
$genderOptions[$key] = HTML_QuickForm::createElement('radio', null, ts('Gender'), $var, $key);
}
$form->addGroup($genderOptions, $name, $title);
if ($required) {
$form->addRule($name, ts('%1 is a required field.', array(1 => $title)), 'required');
}
} else {
if ($fieldName === 'individual_prefix') {
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Core_PseudoConstant::individualPrefix(), $required);
} else {
if ($fieldName === 'individual_suffix') {
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Core_PseudoConstant::individualSuffix(), $required);
} else {
if ($fieldName === 'contact_sub_type') {
$gId = $form->get('gid') ? $form->get('gid') : CRM_Utils_Array::value('group_id', $form->_fields[$fieldName]);
$profileType = $gId ? CRM_Core_BAO_UFField::getProfileType($gId) : null;
$setSubtype = false;
if (CRM_Contact_BAO_ContactType::isaSubType($profileType)) {
$setSubtype = $profileType;
//.........这里部分代码省略.........
示例6: formRule
//.........这里部分代码省略.........
}
if (!$emailField) {
$disableSettingURL = CRM_Utils_System::url('civicrm/admin/setting/preferences/mailing', 'reset=1');
$errors['field_name'] = ts('Your site is currently configured to require double-opt in when users join (subscribe) to Group(s) via a Profile form. In this mode, you need to include an Email field in a Profile BEFORE you can add the Group(s) field. This ensures that an opt-in confirmation email can be sent. Your site administrator can disable double opt-in on the civimail admin settings: <em>%1</em>', array(1 => $disableSettingURL));
}
}
}
//fix for CRM-3037
$fieldType = $fields['field_name'][0];
//get the group type.
$groupType = CRM_Core_BAO_UFGroup::calculateGroupType($self->_gid, FALSE, CRM_Utils_Array::value('field_id', $fields));
switch ($fieldType) {
case 'Contact':
self::formRuleSubType($fieldType, $groupType, $errors);
break;
case 'Individual':
if (in_array('Activity', $groupType) || in_array('Household', $groupType) || in_array('Organization', $groupType)) {
//CRM-7603 - need to support activity + individual.
//$errors['field_name'] =
//ts( 'Cannot add or update profile field type Individual with combination of Household or Organization or Activity' );
if (in_array('Household', $groupType) || in_array('Organization', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Individual with combination of Household or Organization');
}
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
case 'Household':
if (in_array('Activity', $groupType) || in_array('Individual', $groupType) || in_array('Organization', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Household with combination of Individual or Organization or Activity');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
case 'Organization':
if (in_array('Activity', $groupType) || in_array('Household', $groupType) || in_array('Individual', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Organization with combination of Household or Individual or Activity');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
case 'Activity':
if (in_array('Individual', $groupType) || in_array('Membership', $groupType) || in_array('Contribution', $groupType) || in_array('Organization', $groupType) || in_array('Household', $groupType) || in_array('Participant', $groupType)) {
//CRM-7603 - need to support activity + contact type.
//$errors['field_name'] =
//ts( 'Cannot add or update profile field type Activity with combination Participant or Membership or Contribution or Household or Organization or Individual' );
if (in_array('Membership', $groupType) || in_array('Contribution', $groupType) || in_array('Participant', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Activity with combination Participant or Membership or Contribution');
}
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
if ($isCustomField && !isset($errors['field_name'])) {
self::formRuleCustomDataExtentColumnValue($customField, $self->_gid, $fieldType, $errors);
}
break;
case 'Participant':
if (in_array('Membership', $groupType) || in_array('Contribution', $groupType) || in_array('Organization', $groupType) || in_array('Household', $groupType) || in_array('Activity', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Participant with combination of Activity or Membership or Contribution or Household or Organization.');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
case 'Contribution':
//special case where in we allow contribution + oganization fields, for on behalf feature
$profileId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_UFGroup', 'on_behalf_organization', 'id', 'name');
if (in_array('Participant', $groupType) || in_array('Membership', $groupType) || $profileId != $self->_gid && in_array('Organization', $groupType) || in_array('Household', $groupType) || in_array('Activity', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Contribution with combination of Activity or Membership or Participant or Household or Organization');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
case 'Membership':
//special case where in we allow contribution + oganization fields, for on behalf feature
$profileId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_UFGroup', 'on_behalf_organization', 'id', 'name');
if (in_array('Participant', $groupType) || in_array('Contribution', $groupType) || $profileId != $self->_gid && in_array('Organization', $groupType) || in_array('Household', $groupType) || in_array('Activity', $groupType)) {
$errors['field_name'] = ts('Cannot add or update profile field type Membership with combination of Activity or Participant or Contribution or Household or Organization');
} else {
self::formRuleSubType($fieldType, $groupType, $errors);
}
break;
default:
$profileType = CRM_Core_BAO_UFField::getProfileType($fields['group_id'], TRUE, FALSE, TRUE);
if (CRM_Contact_BAO_ContactType::isaSubType($fieldType)) {
if (CRM_Contact_BAO_ContactType::isaSubType($profileType)) {
if ($fieldType != $profileType) {
$errors['field_name'] = ts('Cannot add or update profile field type "%1" with combination of "%2".', array(1 => $fieldType, 2 => $profileType));
}
} else {
$basicType = CRM_Contact_BAO_ContactType::getBasicType($fieldType);
if ($profileType && $profileType != $basicType && $profileType != 'Contact') {
$errors['field_name'] = ts('Cannot add or update profile field type "%1" with combination of "%2".', array(1 => $fieldType, 2 => $profileType));
}
}
} elseif (CRM_Utils_Array::value(1, $fields['field_name']) == 'contact_sub_type' && !in_array($profileType, array('Individual', 'Household', 'Organization')) && !in_array($profileType, CRM_Contact_BAO_ContactType::subTypes())) {
$errors['field_name'] = ts('Cannot add or update profile field Contact Subtype as profile type is not one of Individual, Household or Organization.');
}
}
return empty($errors) ? TRUE : $errors;
}
示例7: buildQuickForm
/**
* Function to actually build the form
*
* @return void
* @access public
*/
public function buildQuickForm()
{
//lets have single status message, CRM-4363
$return = false;
$statusMessage = null;
//we should not allow component and mix profiles in search mode
if ($this->_mode != self::MODE_REGISTER) {
//check for mix profile fields (eg: individual + other contact type)
if (CRM_Core_BAO_UFField::checkProfileType($this->_gid)) {
$statusMessage = ts('Profile search, view and edit are not supported for Profiles which include fields for more than one record type.');
}
$profileType = CRM_Core_BAO_UFField::getProfileType($this->_gid);
if ($this->_id) {
list($contactType, $contactSubType) = CRM_Contact_BAO_Contact::getContactTypes($this->_id);
if ($profileType != 'Contact' && $contactType != $profileType && !CRM_Contact_BAO_ContactType::isaSubType($profileType)) {
$return = true;
if (!$statusMessage) {
$statusMessage = ts('This profile is not configured for "%1" contact type.', array(1 => $contactType));
}
}
if ($contactSubType && CRM_Contact_BAO_ContactType::isaSubType($profileType) && $profileType != $contactSubType) {
$return = true;
if (!$statusMessage) {
$statusMessage = ts('This profile is not configured for "%1" contact subtype.', array(1 => $contactSubType));
}
}
}
if (in_array($profileType, array("Membership", "Participant", "Contribution"))) {
$return = true;
if (!$statusMessage) {
$statusMessage = ts('Profile is not configured for the selected action.');
}
}
}
//lets have sigle status message,
$this->assign('statusMessage', $statusMessage);
if ($return) {
return false;
}
$sBlocks = array();
$hBlocks = array();
$config =& CRM_Core_Config::singleton();
$this->assign('id', $this->_id);
$this->assign('mode', $this->_mode);
$this->assign('action', $this->_action);
$this->assign_by_ref('fields', $this->_fields);
$this->assign('fieldset', isset($this->_fieldset) ? $this->_fieldset : "");
// do we need inactive options ?
if ($this->_action & CRM_Core_Action::VIEW) {
$inactiveNeeded = true;
} else {
$inactiveNeeded = false;
}
$session =& CRM_Core_Session::singleton();
// should we restrict what we display
$admin = true;
if ($this->_mode == self::MODE_EDIT) {
$admin = false;
// show all fields that are visibile: if we are a admin or the same user or in registration mode
if (CRM_Core_Permission::check('administer users') || $this->_id == $session->get('userID')) {
$admin = true;
}
}
$userID = $session->get('userID');
$anonUser = false;
// if false, user is not logged-in.
if (!$userID) {
require_once 'CRM/Core/BAO/LocationType.php';
$defaultLocationType =& CRM_Core_BAO_LocationType::getDefault();
$primaryLocationType = $defaultLocationType->id;
$anonUser = true;
$this->assign('anonUser', true);
}
$addCaptcha = array();
$emailPresent = false;
// cache the state country fields. based on the results, we could use our javascript solution
// in create or register mode
$stateCountryMap = array();
// add the form elements
foreach ($this->_fields as $name => $field) {
// make sure that there is enough permission to expose this field
if (!$admin && $field['visibility'] == 'User and User Admin Only' || CRM_Utils_Array::value('is_view', $field)) {
unset($this->_fields[$name]);
continue;
}
// since the CMS manages the email field, suppress the email display if in
// register mode which occur within the CMS form
if ($this->_mode == self::MODE_REGISTER && substr($name, 0, 5) == 'email') {
unset($this->_fields[$name]);
continue;
}
list($prefixName, $index) = CRM_Utils_System::explode('-', $name, 2);
if ($prefixName == 'state_province' || $prefixName == 'country') {
if (!array_key_exists($index, $stateCountryMap)) {
//.........这里部分代码省略.........
示例8: buildProfile
//.........这里部分代码省略.........
} elseif ($fieldName === 'birth_date' || $fieldName === 'deceased_date') {
$form->addDate($name, $title, $required, array('formatType' => 'birth'));
} elseif (in_array($fieldName, array('membership_start_date', 'membership_end_date', 'join_date'))) {
$form->addDate($name, $title, $required, array('formatType' => 'custom'));
} elseif ($field['name'] == 'membership_type') {
list($orgInfo, $types) = CRM_Member_BAO_MembershipType::getMembershipTypeInfo();
$sel =& $form->addElement('hierselect', $name, $title);
$select = array('' => ts('- select -'));
$sel->setOptions(array($select + $orgInfo, $types));
} elseif ($field['name'] == 'membership_status') {
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Member_PseudoConstant::membershipStatus(NULL, NULL, 'label'), $required);
} elseif ($fieldName === 'gender') {
$genderOptions = array();
$gender = CRM_Core_PseudoConstant::gender();
foreach ($gender as $key => $var) {
$genderOptions[$key] = $form->createElement('radio', NULL, ts('Gender'), $var, $key);
}
$form->addGroup($genderOptions, $name, $title);
if ($required) {
$form->addRule($name, ts('%1 is a required field.', array(1 => $title)), 'required');
}
} elseif ($fieldName === 'individual_prefix') {
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Core_PseudoConstant::individualPrefix(), $required);
} elseif ($fieldName === 'individual_suffix') {
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Core_PseudoConstant::individualSuffix(), $required);
} elseif ($fieldName === 'contact_sub_type') {
$gId = $form->get('gid') ? $form->get('gid') : CRM_Utils_Array::value('group_id', $form->_fields[$fieldName]);
if ($onBehalf) {
$profileType = 'Organization';
} else {
$profileType = $gId ? CRM_Core_BAO_UFField::getProfileType($gId) : NULL;
}
$setSubtype = FALSE;
if (CRM_Contact_BAO_ContactType::isaSubType($profileType)) {
$setSubtype = $profileType;
$profileType = CRM_Contact_BAO_ContactType::getBasicType($profileType);
}
$subtypes = $profileType ? CRM_Contact_BAO_ContactType::subTypePairs($profileType) : array();
if ($setSubtype) {
$subtypeList = array();
$subtypeList[$setSubtype] = $subtypes[$setSubtype];
} else {
$subtypeList = $subtypes;
}
$sel = $form->add('select', $name, $title, $subtypeList, $required);
$sel->setMultiple(TRUE);
} elseif (in_array($fieldName, CRM_Contact_BAO_Contact::$_greetingTypes)) {
//add email greeting, postal greeting, addressee, CRM-4575
$gId = $form->get('gid') ? $form->get('gid') : CRM_Utils_Array::value('group_id', $field);
$profileType = CRM_Core_BAO_UFField::getProfileType($gId, TRUE, FALSE, TRUE);
if (empty($profileType) || in_array($profileType, array('Contact', 'Contribution', 'Participant', 'Membership'))) {
$profileType = 'Individual';
}
if (CRM_Contact_BAO_ContactType::isaSubType($profileType)) {
$profileType = CRM_Contact_BAO_ContactType::getBasicType($profileType);
}
$greeting = array('contact_type' => $profileType, 'greeting_type' => $fieldName);
$form->add('select', $name, $title, array('' => ts('- select -')) + CRM_Core_PseudoConstant::greeting($greeting), $required);
// add custom greeting element
$form->add('text', $fieldName . '_custom', ts('Custom %1', array(1 => ucwords(str_replace('_', ' ', $fieldName)))), NULL, FALSE);
} elseif ($fieldName === 'preferred_communication_method') {
$communicationFields = CRM_Core_PseudoConstant::pcm();
foreach ($communicationFields as $key => $var) {
if ($key == '') {
continue;
}
示例9: createProfileContact
/**
* function to add/edit/register contacts through profile.
*
* @params array $params Array of profile fields to be edited/added.
* @params int $contactID contact_id of the contact to be edited/added.
* @params array $fields array of fields from UFGroup
* @params int $addToGroupID specifies the default group to which contact is added.
* @params int $ufGroupId uf group id (profile id)
* @param string $ctype contact type
*
* @return int contact id created/edited
* @static
* @access public
*/
static function createProfileContact(&$params, &$fields, $contactID = null, $addToGroupID = null, $ufGroupId = null, $ctype = null, $visibility = false)
{
// add ufGroupID to params array ( CRM-2012 )
if ($ufGroupId) {
$params['uf_group_id'] = $ufGroupId;
}
require_once 'CRM/Utils/Hook.php';
if ($contactID) {
$editHook = true;
CRM_Utils_Hook::pre('edit', 'Profile', $contactID, $params);
} else {
$editHook = false;
CRM_Utils_Hook::pre('create', 'Profile', null, $params);
}
$data = $contactDetails = array();
// get the contact details (hier)
if ($contactID) {
list($details, $options) = self::getHierContactDetails($contactID, $fields);
$contactDetails = $details[$contactID];
$data['contact_type'] = CRM_Utils_Array::value('contact_type', $contactDetails);
} else {
//we should get contact type only if contact
if ($ufGroupId) {
require_once "CRM/Core/BAO/UFField.php";
$data['contact_type'] = CRM_Core_BAO_UFField::getProfileType($ufGroupId);
//special case to handle profile with only contact fields
if ($data['contact_type'] == 'Contact') {
$data['contact_type'] = 'Individual';
} else {
if (CRM_Contact_BAO_ContactType::isaSubType($data['contact_type'])) {
$data['contact_type'] = CRM_Contact_BAO_ContactType::getBasicType($data['contact_type']);
}
}
} else {
if ($ctype) {
$data['contact_type'] = $ctype;
} else {
$data['contact_type'] = 'Individual';
}
}
}
//fix contact sub type CRM-5125
if ($subType = CRM_Utils_Array::value('contact_sub_type', $params)) {
$data['contact_sub_type'] = $subType;
} else {
if ($ufGroupId) {
$data['contact_sub_type'] = CRM_Core_BAO_UFField::getProfileSubType($ufGroupId, $data['contact_type']);
}
}
if ($ctype == "Organization") {
$data["organization_name"] = $contactDetails["organization_name"];
} else {
if ($ctype == "Household") {
$data["household_name"] = $contactDetails["household_name"];
}
}
$locationType = array();
$count = 1;
if ($contactID) {
//add contact id
$data['contact_id'] = $contactID;
$primaryLocationType = self::getPrimaryLocationType($contactID);
} else {
require_once "CRM/Core/BAO/LocationType.php";
$defaultLocation =& CRM_Core_BAO_LocationType::getDefault();
$defaultLocationId = $defaultLocation->id;
}
// get the billing location type
$locationTypes =& CRM_Core_PseudoConstant::locationType();
$billingLocationTypeId = array_search('Billing', $locationTypes);
$blocks = array('email', 'phone', 'im', 'openid');
// prevent overwritten of formatted array, reset all block from
// params if it is not in valid format (since import pass valid format)
foreach ($blocks as $blk) {
if (array_key_exists($blk, $params) && !is_array($params[$blk])) {
unset($params[$blk]);
}
}
$primaryPhoneLoc = null;
foreach ($params as $key => $value) {
$fieldName = $locTypeId = $typeId = null;
list($fieldName, $locTypeId, $typeId) = CRM_Utils_System::explode('-', $key, 3);
//store original location type id
$actualLocTypeId = $locTypeId;
if ($locTypeId == 'Primary') {
if ($contactID) {
//.........这里部分代码省略.........
示例10: postProcess
/**
* Process the user submitted custom data values.
*
* @access public
* @return void
*/
public function postProcess()
{
$params = $this->controller->exportValues($this->_name);
if (CRM_Utils_Array::value('image_URL', $params)) {
CRM_Contact_BAO_Contact::processImageParams($params);
}
$greetingTypes = array('addressee' => 'addressee_id', 'email_greeting' => 'email_greeting_id', 'postal_greeting' => 'postal_greeting_id');
if ($this->_id) {
$contactDetails = CRM_Contact_BAO_Contact::getHierContactDetails($this->_id, $greetingTypes);
$details = $contactDetails[0][$this->_id];
}
if (!(CRM_Utils_Array::value('addressee_id', $details) || CRM_Utils_Array::value('email_greeting_id', $details) || CRM_Utils_Array::value('postal_greeting_id', $details))) {
$profileType = CRM_Core_BAO_UFField::getProfileType($this->_gid);
//Though Profile type is contact we need
//Individual/Household/Organization for setting Greetings.
if ($profileType == 'Contact') {
$profileType = 'Individual';
//if we editing Household/Organization.
if ($this->_id) {
$profileType = CRM_Contact_BAO_Contact::getContactType($this->_id);
}
}
if (CRM_Contact_BAO_ContactType::isaSubType($profileType)) {
$profileType = CRM_Contact_BAO_ContactType::getBasicType($profileType);
}
$contactTypeFilters = array(1 => 'Individual', 2 => 'Household', 3 => 'Organization');
$filter = CRM_Utils_Array::key($profileType, $contactTypeFilters);
if ($filter) {
foreach ($greetingTypes as $key => $value) {
if (!array_key_exists($key, $params)) {
$defaultGreetingTypeId = CRM_Core_OptionGroup::values($key, null, null, null, "AND is_default =1\n AND (filter = \n {$filter} OR \n filter = 0 )", 'value');
$params[$key] = key($defaultGreetingTypeId);
}
}
}
if ($profileType == 'Organization') {
unset($params['email_greeting'], $params['postal_greeting']);
}
}
if ($this->_mode == self::MODE_REGISTER) {
require_once 'CRM/Core/BAO/Address.php';
CRM_Core_BAO_Address::setOverwrite(false);
}
require_once 'CRM/Core/Transaction.php';
$transaction = new CRM_Core_Transaction();
//used to send subcribe mail to the group which user want.
//if the profile double option in is enabled
$mailingType = array();
$config = CRM_Core_Config::singleton();
if ($config->profileDoubleOptIn && CRM_Utils_Array::value('group', $params)) {
$result = null;
foreach ($params as $name => $values) {
if (substr($name, 0, 6) == 'email-') {
$result['email'] = $values;
}
}
$groupSubscribed = array();
if (CRM_Utils_Array::value('email', $result)) {
require_once 'CRM/Contact/DAO/Group.php';
//array of group id, subscribed by contact
$contactGroup = array();
if ($this->_id) {
$contactGroups = new CRM_Contact_DAO_GroupContact();
$contactGroups->contact_id = $this->_id;
$contactGroups->status = 'Added';
$contactGroups->find();
$contactGroup = array();
while ($contactGroups->fetch()) {
$contactGroup[] = $contactGroups->group_id;
$groupSubscribed[$contactGroups->group_id] = 1;
}
}
foreach ($params['group'] as $key => $val) {
if (!$val) {
unset($params['group'][$key]);
continue;
}
$groupTypes = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Group', $key, 'group_type', 'id');
$groupType = explode(CRM_Core_BAO_CustomOption::VALUE_SEPERATOR, substr($groupTypes, 1, -1));
//filter group of mailing type and unset it from params
if (in_array(2, $groupType)) {
//if group is already subscribed , ignore it
$groupExist = CRM_Utils_Array::key($key, $contactGroup);
if (!isset($groupExist)) {
$mailingType[] = $key;
unset($params['group'][$key]);
}
}
}
}
}
if (CRM_Utils_Array::value('add_to_group', $params)) {
$addToGroupId = $params['add_to_group'];
// since we are directly adding contact to group lets unset it from mailing
//.........这里部分代码省略.........