コード例 #1
0
/**
 * 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.');
        }
    }
}
コード例 #2
0
/**
 *  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;
}