/** * Function to Copy household address, if use_household_address option is checked. * * @param array $params the input form values * * @return void * @access public * @static */ static function copyHouseholdAddress(&$params) { if ($params['shared_household']) { $params['mail_to_household_id'] = $params['shared_household']; } if (!$params['mail_to_household_id']) { CRM_Core_Error::statusBounce(ts("Shared Household-ID not found.")); } $locParams = array('version' => '3.0', 'contact_id' => $params['mail_to_household_id']); $location_types = array(); require_once 'api/v2/Location.php'; $values =& _civicrm_location_get($locParams, $location_types); $addressFields = CRM_Core_DAO_Address::fields(); foreach ($addressFields as $key => $val) { if (!CRM_Utils_Array::value($key, $values['address'][1])) { $values['address'][1][$key] = ""; } } if ($is_billing = $params['address'][1]['is_billing']) { $values['address'][1]['is_billing'] = $is_billing; } if ($values['address'][1]['country_id'] == "null") { $values['address'][1]['country_id'] = 0; } if ($values['address'][1]['state_province_id'] == "null") { $values['address'][1]['state_province_id'] = 0; } $params['address'][1] = $values['address'][1]; // unset all the ids and unwanted fields $unsetFields = array('id', 'location_id', 'timezone', 'note'); foreach ($unsetFields as $fld) { unset($params['address'][1][$fld]); } }
/** * Returns array of location(s) for a contact * * @param array $contact a valid array of contact parameters * * @return array an array of location parameters arrays * * @access public */ function civicrm_location_get($contact) { _civicrm_initialize(); if (!is_array($contact)) { return civicrm_create_error('Params need to be of type array!'); } if (!isset($contact['contact_id'])) { return civicrm_create_error('$contact is not valid contact datatype'); } $locationTypes = CRM_Utils_Array::value('location_type', $contact); if (is_array($locationTypes) && !count($locationTypes)) { return civicrm_create_error('Location type array can not be empty'); } $location =& _civicrm_location_get($contact, $locationTypes); return $location; }
/** * This function synchronizes (updates) the address of individuals, * sharing the address of the passed household-contact-ID. * @param integer $householdContactID the household contact id. * * @return void * @access public * @static */ static function synchronizeIndividualAddresses($householdContactID) { require_once 'api/v2/Location.php'; require_once 'CRM/Core/BAO/Location.php'; $locValues =& _civicrm_location_get(array('version' => '3.0', 'contact_id' => $householdContactID)); $query = "\nSELECT cc.id as id,ca.id address_id \nFROM civicrm_contact cc LEFT JOIN civicrm_address ca ON cc.id = ca.contact_id \nWHERE mail_to_household_id = {$householdContactID};"; $contact = CRM_Core_DAO::executeQuery($query); $query = "UPDATE civicrm_address ca, civicrm_contact cc\nSET is_primary = 0 \nWHERE ca.contact_id = cc.id AND mail_to_household_id = {$householdContactID};"; $update = CRM_Core_DAO::singleValueQuery($query); if (CRM_Utils_Array::value('address', $locValues) && count($locValues['address'])) { while ($contact->fetch()) { $locParams = array('contact_id' => $contact->id, 'address' => array(1 => $locValues['address'][1])); // removing unwanted ids from the params array foreach (array('timezone', 'contact_id') as $fld) { if (isset($locParams['address'][1][$fld])) { unset($locParams['address'][1][$fld]); } } $locParams['address'][1]['id'] = $contact->address_id; CRM_Core_BAO_Location::create($locParams); } } }