/** * function to retrieve and update geocoding (lat/long) values for a specified 'address object' and 'contact object' using the configured geo-coding method. * * @param object $object valid address/contact object * * @return null * * $access public */ function crm_fix_address($object) { require_once 'CRM/Utils/Geocode/Yahoo.php'; if (is_a($object, 'CRM_Core_BAO_Address')) { $temp = array(); foreach ($object as $name => $value) { $temp[$name] = $value; } $found = CRM_Utils_Geocode_Yahoo::format($temp); $object->copyValues($temp); // code for saving the changes in database $params = array(); $ids = array(); foreach ($object as $name => $value) { $params['location'][1]['address'][$name] = $value; } $ids['location'][1]['id'] = $object->location_id; $ids['location'][1]['address'] = $object->id; CRM_Core_BAO_Address::add($params, $ids, 1); } else { if (is_a($object, 'CRM_Contact_BAO_Contact')) { $params = $ids = $temp = array(); $locations =& crm_get_locations($object); $locNo = 1; foreach ($locations as $loc => $value) { $addObject =& $locations[$locNo]->address; foreach ($addObject as $name => $value) { $temp[$name] = $value; } if (CRM_Utils_Geocode_Yahoo::format($temp)) { $params['location'][$locNo]['address']['geo_code_1'] = $temp['geo_code_1']; $params['location'][$locNo]['address']['geo_code_2'] = $temp['geo_code_2']; $ids['location'][$locNo]['id'] = $object->location[$locNo]->id; $ids['location'][$locNo]['address'] = $object->location[$locNo]->address->id; $locationId = $locNo; CRM_Core_BAO_Address::add($params, $ids, $locationId); } $locNo++; } } else { return _crm_error('Please pass valid contact / address object.'); } } }
/** * Update a specified location with the provided property values. * * @param object $contact A valid Contact object (passed by reference). * @param string $location_id Valid (db-level) id for location to be updated. * @param Array $params Associative array of property name/value pairs to be updated * * @return Location object with updated property values * * @access public * */ function crm_update_location(&$contact, $location_id, $params) { _crm_initialize(); if (!isset($contact->id)) { return _crm_error('$contact is not valid contact datatype'); } $locationId = (int) $location_id; if ($locationId == 0) { return _crm_error('missing or invalid $location_id'); } // $locationNumber is the contact-level number of the location (1, 2, 3, etc.) $locationNumber = null; $locations =& crm_get_locations($contact); foreach ($locations as $locNumber => $locValue) { if ($locValue->id == $locationId) { $locationNumber = $locNumber; break; } } if (!$locationNumber) { return _crm_error('invalid $location_id'); } $values = array('contact_id' => $contact->id, 'location' => array($locationNumber => array())); $loc =& $values['location'][$locationNumber]; $loc['address'] = array(); require_once 'CRM/Core/DAO/Address.php'; $fields =& CRM_Core_DAO_Address::fields(); _crm_store_values($fields, $params, $loc['address']); //$ids = array( 'county', 'country_id', 'state_province_id', 'supplemental_address_1', 'supplemental_address_2', 'StateProvince.name' ); $ids = array('county', 'country_id', 'country', 'state_province_id', 'state_province', 'supplemental_address_1', 'supplemental_address_2', 'StateProvince.name', 'street_address'); foreach ($ids as $id) { if (array_key_exists($id, $params)) { $loc['address'][$id] = $params[$id]; } } if (is_numeric($loc['address']['state_province'])) { $loc['address']['state_province'] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($loc['address']['state_province']); } if (is_numeric($loc['address']['country'])) { $loc['address']['country'] = CRM_Core_PseudoConstant::countryIsoCode($loc['address']['country']); } if (array_key_exists('location_type_id', $params)) { $loc['location_type_id'] = $params['location_type_id']; } if (array_key_exists('location_type', $params)) { $locTypes =& CRM_Core_PseudoConstant::locationType(); $loc['location_type_id'] = CRM_Utils_Array::key($params['location_type'], $locTypes); } if (array_key_exists('name', $params)) { $loc['name'] = $params['name']; } if (array_key_exists('is_primary', $params)) { $loc['is_primary'] = (int) $params['is_primary']; } $loc['id'] = $locationId; $blocks = array('Email', 'Phone', 'IM'); foreach ($blocks as $block) { $name = strtolower($block); $loc[$name] = array(); if ($params[$name]) { $count = 1; foreach ($params[$name] as $val) { CRM_Core_DAO::storeValues($val, $loc[$name][$count++]); } } } $par = array('id' => $contact->id, 'contact_id' => $contact->id); $contact = CRM_Contact_BAO_Contact::retrieve($par, $defaults, $ids); CRM_Contact_BAO_Contact::resolveDefaults($values, true); $location = CRM_Core_BAO_Location::add($values, $ids, $locationNumber); return $location; }