本文整理汇总了PHP中CRM_Contact_BAO_Contact::getLocBlockIds方法的典型用法代码示例。如果您正苦于以下问题:PHP CRM_Contact_BAO_Contact::getLocBlockIds方法的具体用法?PHP CRM_Contact_BAO_Contact::getLocBlockIds怎么用?PHP CRM_Contact_BAO_Contact::getLocBlockIds使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CRM_Contact_BAO_Contact
的用法示例。
在下文中一共展示了CRM_Contact_BAO_Contact::getLocBlockIds方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: checkPrimaryBlocks
/**
* If contact has data for any location block, make sure
* contact should have only one primary block, CRM-5051
*
* @param int $contactId - contact id
*
* @access public
* @static
*/
static function checkPrimaryBlocks($contactId)
{
if (!$contactId) {
return;
}
// get the loc block ids.
$primaryLocBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($contactId, array('is_primary' => 1));
$nonPrimaryBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($contactId, array('is_primary' => 0));
foreach (array('Email', 'IM', 'Phone', 'Address', 'OpenID') as $block) {
$name = strtolower($block);
if (array_key_exists($name, $primaryLocBlockIds) && !CRM_Utils_System::isNull($primaryLocBlockIds[$name])) {
if (count($primaryLocBlockIds[$name]) > 1) {
// keep only single block as primary.
$primaryId = array_pop($primaryLocBlockIds[$name]);
$resetIds = "(" . implode(',', $primaryLocBlockIds[$name]) . ")";
// reset all primary except one.
CRM_Core_DAO::executeQuery("UPDATE civicrm_{$name} SET is_primary = 0 WHERE id IN {$resetIds}");
}
} elseif (array_key_exists($name, $nonPrimaryBlockIds) && !CRM_Utils_System::isNull($nonPrimaryBlockIds[$name])) {
// data exists and no primary block - make one primary.
CRM_Core_DAO::setFieldValue("CRM_Core_DAO_" . $block, array_pop($nonPrimaryBlockIds[$name]), 'is_primary', 1);
}
}
}
示例2: postProcess
public function postProcess()
{
$formValues = $this->exportValues();
// user can't choose to move cases without activities (CRM-3778)
if ($formValues['move_rel_table_cases'] == '1' && array_key_exists('move_rel_table_activities', $formValues)) {
$formValues['move_rel_table_activities'] = '1';
}
// reset all selected contact ids from session
// when we came from search context, CRM-3526
$session =& CRM_Core_Session::singleton();
if ($session->get('selectedSearchContactIds')) {
$session->resetScope('selectedSearchContactIds');
}
$relTables =& CRM_Dedupe_Merger::relTables();
$moveTables = $locBlocks = array();
foreach ($formValues as $key => $value) {
if ($value == $this->_qfZeroBug) {
$value = '0';
}
if ((in_array(substr($key, 5), CRM_Dedupe_Merger::$validFields) or substr($key, 0, 12) == 'move_custom_') and $value != null) {
$submitted[substr($key, 5)] = $value;
} elseif (substr($key, 0, 14) == 'move_location_' and $value != null) {
$locField = explode('_', $key);
$fieldName = $locField[2];
$fieldCount = $locField[3];
$operation = CRM_Utils_Array::value('operation', $formValues['location'][$fieldName][$fieldCount]);
// default operation is overwrite.
if (!$operation) {
$operation = 2;
}
$locBlocks[$fieldName][$fieldCount]['operation'] = $operation;
$locBlocks[$fieldName][$fieldCount]['locTypeId'] = CRM_Utils_Array::value('locTypeId', $formValues['location'][$fieldName][$fieldCount]);
} elseif (substr($key, 0, 15) == 'move_rel_table_' and $value == '1') {
$moveTables = array_merge($moveTables, $relTables[substr($key, 5)]['tables']);
}
}
// process location blocks.
if (!empty($locBlocks)) {
$locComponent = array('email' => 'Email', 'phone' => 'Phone', 'im' => 'IM', 'openid' => 'OpenID', 'address' => 'Address');
require_once 'CRM/Contact/BAO/Contact.php';
$primaryBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($this->_cid, array('is_primary' => 1));
$billingBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($this->_cid, array('is_billing' => 1));
foreach ($locBlocks as $name => $block) {
if (!is_array($block) || CRM_Utils_System::isNull($block)) {
continue;
}
$daoName = $locComponent[$name];
$primaryDAOId = array_key_exists($name, $primaryBlockIds) ? array_pop($primaryBlockIds[$name]) : null;
$billingDAOId = array_key_exists($name, $billingBlockIds) ? array_pop($billingBlockIds[$name]) : null;
foreach ($block as $blkCount => $values) {
$locTypeId = CRM_Utils_Array::value('locTypeId', $values, 1);
$operation = CRM_Utils_Array::value('operation', $values, 2);
$updateBlockId = CRM_Utils_Array::value($blkCount, $this->_locBlockIds['other'][$name]);
// keep 1-1 mapping for address - loc type.
$idKey = $blkCount;
if ($name == 'address') {
$idKey = $locTypeId;
}
$deleteBlockId = CRM_Utils_Array::value($idKey, $this->_locBlockIds['main'][$name]);
if (!$updateBlockId) {
continue;
}
require_once "CRM/Core/DAO/{$daoName}.php";
eval("\$updateDAO =& new CRM_Core_DAO_{$daoName}();");
$updateDAO->id = $updateBlockId;
$updateDAO->contact_id = $this->_cid;
$updateDAO->location_type_id = $locTypeId;
// contact having primary block.
if ($primaryDAOId) {
$updateDAO->is_primary = 0;
}
if ($billingDAOId) {
$updateDAO->is_billing = 0;
}
// overwrite - need to delete block from main contact.
if ($deleteBlockId && $operation == 2) {
eval("\$deleteDAO =& new CRM_Core_DAO_{$daoName}();");
$deleteDAO->id = $deleteBlockId;
$deleteDAO->find(true);
// since we overwrite primary block.
if ($primaryDAOId && $primaryDAOId == $deleteDAO->id) {
$updateDAO->is_primary = 1;
}
if ($billingDAOId && $billingDAOId == $deleteDAO->id) {
$updateDAO->is_billing = 1;
}
$deleteDAO->delete();
$deleteDAO->free();
}
$updateDAO->update();
$updateDAO->free();
}
}
}
// FIXME: fix gender, prefix and postfix, so they're edible by createProfileContact()
$names['gender'] = array('newName' => 'gender_id', 'groupName' => 'gender');
$names['individual_prefix'] = array('newName' => 'prefix_id', 'groupName' => 'individual_prefix');
$names['individual_suffix'] = array('newName' => 'suffix_id', 'groupName' => 'individual_suffix');
$names['addressee'] = array('newName' => 'addressee_id', 'groupName' => 'addressee');
$names['email_greeting'] = array('newName' => 'email_greeting_id', 'groupName' => 'email_greeting');
//.........这里部分代码省略.........
示例3: moveAllBelongings
/**
* Based on the provided two contact_ids and a set of tables, move the belongings of the
* other contact to the main one - be it Location / CustomFields or Contact .. related info.
* A superset of moveContactBelongings() function.
*
* @param int $mainId
* Main contact with whom merge has to happen.
* @param int $otherId
* Duplicate contact which would be deleted after merge operation.
*
* @param $migrationInfo
*
* @return bool
*/
public static function moveAllBelongings($mainId, $otherId, $migrationInfo)
{
if (empty($migrationInfo)) {
return FALSE;
}
$qfZeroBug = 'e8cddb72-a257-11dc-b9cc-0016d3330ee9';
$relTables = CRM_Dedupe_Merger::relTables();
$moveTables = $locBlocks = $tableOperations = array();
foreach ($migrationInfo as $key => $value) {
if ($value == $qfZeroBug) {
$value = '0';
}
if ((in_array(substr($key, 5), CRM_Dedupe_Merger::getContactFields()) || substr($key, 0, 12) == 'move_custom_') && $value != NULL) {
$submitted[substr($key, 5)] = $value;
} elseif (substr($key, 0, 14) == 'move_location_' and $value != NULL) {
$locField = explode('_', $key);
$fieldName = $locField[2];
$fieldCount = $locField[3];
$operation = CRM_Utils_Array::value('operation', $migrationInfo['location'][$fieldName][$fieldCount]);
// default operation is overwrite.
if (!$operation) {
$operation = 2;
}
$locBlocks[$fieldName][$fieldCount]['operation'] = $operation;
$locBlocks[$fieldName][$fieldCount]['locTypeId'] = CRM_Utils_Array::value('locTypeId', $migrationInfo['location'][$fieldName][$fieldCount]);
} elseif (substr($key, 0, 15) == 'move_rel_table_' and $value == '1') {
$moveTables = array_merge($moveTables, $relTables[substr($key, 5)]['tables']);
if (array_key_exists('operation', $migrationInfo)) {
foreach ($relTables[substr($key, 5)]['tables'] as $table) {
if (array_key_exists($key, $migrationInfo['operation'])) {
$tableOperations[$table] = $migrationInfo['operation'][$key];
}
}
}
}
}
// **** Do location related migration:
if (!empty($locBlocks)) {
$locComponent = array('email' => 'Email', 'phone' => 'Phone', 'im' => 'IM', 'openid' => 'OpenID', 'address' => 'Address');
$primaryBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($mainId, array('is_primary' => 1));
$billingBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($mainId, array('is_billing' => 1));
foreach ($locBlocks as $name => $block) {
if (!is_array($block) || CRM_Utils_System::isNull($block)) {
continue;
}
$daoName = 'CRM_Core_DAO_' . $locComponent[$name];
$primaryDAOId = array_key_exists($name, $primaryBlockIds) ? array_pop($primaryBlockIds[$name]) : NULL;
$billingDAOId = array_key_exists($name, $billingBlockIds) ? array_pop($billingBlockIds[$name]) : NULL;
foreach ($block as $blkCount => $values) {
$locTypeId = CRM_Utils_Array::value('locTypeId', $values, 1);
$operation = CRM_Utils_Array::value('operation', $values, 2);
$otherBlockId = CRM_Utils_Array::value($blkCount, $migrationInfo['other_details']['loc_block_ids'][$name]);
// keep 1-1 mapping for address - loc type.
$idKey = $blkCount;
if (array_key_exists($name, $locComponent)) {
$idKey = $locTypeId;
}
if (isset($migrationInfo['main_details']['loc_block_ids'][$name])) {
$mainBlockId = CRM_Utils_Array::value($idKey, $migrationInfo['main_details']['loc_block_ids'][$name]);
}
if (!$otherBlockId) {
continue;
}
// for the block which belongs to other-contact, link the contact to main-contact
$otherBlockDAO = new $daoName();
$otherBlockDAO->id = $otherBlockId;
$otherBlockDAO->contact_id = $mainId;
$otherBlockDAO->location_type_id = $locTypeId;
// if main contact already has primary & billing, set the flags to 0.
if ($primaryDAOId) {
$otherBlockDAO->is_primary = 0;
}
if ($billingDAOId) {
$otherBlockDAO->is_billing = 0;
}
// overwrite - need to delete block which belongs to main-contact.
if (isset($mainBlockId) && $mainBlockId && $operation == 2) {
$deleteDAO = new $daoName();
$deleteDAO->id = $mainBlockId;
$deleteDAO->find(TRUE);
// if we about to delete a primary / billing block, set the flags for new block
// that we going to assign to main-contact
if ($primaryDAOId && $primaryDAOId == $deleteDAO->id) {
$otherBlockDAO->is_primary = 1;
}
if ($billingDAOId && $billingDAOId == $deleteDAO->id) {
//.........这里部分代码省略.........
示例4: mergeLocations
/**
* Merge location.
*
* Based on the data in the $locationMigrationInfo merge the locations for 2 contacts.
*
* The data is in the format received from the merge form (which is a fairly confusing format).
*
* It is converted into an array of DAOs which is passed to the alterLocationMergeData hook
* before saving or deleting the DAOs. A new hook is added to allow these to be altered after they have
* been calculated and before saving because
* - the existing format & hook combo is so confusing it is hard for developers to change & inherently fragile
* - passing to a hook right before save means calculations only have to be done once
* - the existing pattern of passing dissimilar data to the same (merge) hook with a different 'type' is just
* ugly.
*
* The use of the new hook is tested, including the fact it is called before contributions are merged, as this
* is likely to be significant data in merge hooks.
*
* @param int $mainId
* @param int $otherId
* @param array $locationMigrationInfo
* Portion of the migration_info that holds location migration information.
*
* @param array $migrationInfo
* Migration info for the merge. This is passed to the hook as informational only.
*/
public static function mergeLocations($mainId, $otherId, $locationMigrationInfo, $migrationInfo)
{
foreach ($locationMigrationInfo as $key => $value) {
$locField = explode('_', $key);
$fieldName = $locField[2];
$fieldCount = $locField[3];
// Set up the operation type (add/overwrite)
// Ignore operation for websites
// @todo Tidy this up
$operation = 0;
if ($fieldName != 'website') {
$operation = CRM_Utils_Array::value('operation', $migrationInfo['location_blocks'][$fieldName][$fieldCount]);
}
// default operation is overwrite.
if (!$operation) {
$operation = 2;
}
$locBlocks[$fieldName][$fieldCount]['operation'] = $operation;
}
$blocksDAO = array();
// @todo Handle OpenID (not currently in API).
if (!empty($locBlocks)) {
$locationBlocks = self::getLocationBlockInfo();
$primaryBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($mainId, array('is_primary' => 1));
$billingBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($mainId, array('is_billing' => 1));
foreach ($locBlocks as $name => $block) {
$blocksDAO[$name] = array('delete' => array(), 'update' => array());
if (!is_array($block) || CRM_Utils_System::isNull($block)) {
continue;
}
$daoName = 'CRM_Core_DAO_' . $locationBlocks[$name]['label'];
$changePrimary = FALSE;
$primaryDAOId = array_key_exists($name, $primaryBlockIds) ? array_pop($primaryBlockIds[$name]) : NULL;
$billingDAOId = array_key_exists($name, $billingBlockIds) ? array_pop($billingBlockIds[$name]) : NULL;
foreach ($block as $blkCount => $values) {
$otherBlockId = CRM_Utils_Array::value('id', $migrationInfo['other_details']['location_blocks'][$name][$blkCount]);
$mainBlockId = CRM_Utils_Array::value('mainContactBlockId', $migrationInfo['location_blocks'][$name][$blkCount], 0);
if (!$otherBlockId) {
continue;
}
// For the block which belongs to other-contact, link the location block to main-contact
$otherBlockDAO = new $daoName();
$otherBlockDAO->contact_id = $mainId;
// Get the ID of this block on the 'other' contact, otherwise skip
$otherBlockDAO->id = $otherBlockId;
// Add/update location and type information from the form, if applicable
if ($locationBlocks[$name]['hasLocation']) {
$locTypeId = CRM_Utils_Array::value('locTypeId', $migrationInfo['location_blocks'][$name][$blkCount]);
$otherBlockDAO->location_type_id = $locTypeId;
}
if ($locationBlocks[$name]['hasType']) {
$typeTypeId = CRM_Utils_Array::value('typeTypeId', $migrationInfo['location_blocks'][$name][$blkCount]);
$otherBlockDAO->{$locationBlocks[$name]['hasType']} = $typeTypeId;
}
// If we're deliberately setting this as primary then add the flag
// and remove it from the current primary location (if there is one).
// But only once for each entity.
$set_primary = CRM_Utils_Array::value('set_other_primary', $migrationInfo['location_blocks'][$name][$blkCount]);
if (!$changePrimary && $set_primary == "1") {
$otherBlockDAO->is_primary = 1;
if ($primaryDAOId) {
$removePrimaryDAO = new $daoName();
$removePrimaryDAO->id = $primaryDAOId;
$removePrimaryDAO->is_primary = 0;
$blocksDAO[$name]['update'][$primaryDAOId] = $removePrimaryDAO;
}
$changePrimary = TRUE;
} elseif ($primaryDAOId) {
$otherBlockDAO->is_primary = 0;
}
// If the main contact already has a billing location, set this to 0.
if ($billingDAOId) {
$otherBlockDAO->is_billing = 0;
}
//.........这里部分代码省略.........