/** * Function is used to format the individual contact values. * * @param array $params * (reference ) an assoc array of name/value pairs. * @param CRM $contact * Contact object. * * @return CRM_Contact_BAO_Contact */ public static function format(&$params, &$contact) { if (!self::dataExists($params)) { return NULL; } // "null" value for example is passed by dedupe merge in order to empty. // Display name computation shouldn't consider such values. foreach (array('first_name', 'middle_name', 'last_name', 'nick_name', 'formal_title') as $displayField) { if (CRM_Utils_Array::value($displayField, $params) == "null") { $params[$displayField] = ''; } } $sortName = $displayName = ''; $firstName = CRM_Utils_Array::value('first_name', $params, ''); $middleName = CRM_Utils_Array::value('middle_name', $params, ''); $lastName = CRM_Utils_Array::value('last_name', $params, ''); $nickName = CRM_Utils_Array::value('nick_name', $params, ''); $prefix_id = CRM_Utils_Array::value('prefix_id', $params, ''); $suffix_id = CRM_Utils_Array::value('suffix_id', $params, ''); $formalTitle = CRM_Utils_Array::value('formal_title', $params, ''); // get prefix and suffix names $prefix = $suffix = NULL; if ($prefix_id) { $params['individual_prefix'] = $prefix = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', 'prefix_id', $prefix_id); } if ($suffix_id) { $params['individual_suffix'] = $suffix = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', 'suffix_id', $suffix_id); } $params['is_deceased'] = CRM_Utils_Array::value('is_deceased', $params, FALSE); $individual = NULL; if ($contact->id) { $individual = new CRM_Contact_BAO_Contact(); $individual->id = $contact->id; if ($individual->find(TRUE)) { //lets allow to update single name field though preserveDBName //but if db having null value and params contain value, CRM-4330. $useDBNames = array(); foreach (array('last', 'middle', 'first', 'nick') as $name) { $dbName = "{$name}_name"; $value = $individual->{$dbName}; // the db has name values if ($value && !empty($params['preserveDBName'])) { $useDBNames[] = $name; } } foreach (array('prefix', 'suffix') as $name) { $dbName = "{$name}_id"; $value = $individual->{$dbName}; if ($value && !empty($params['preserveDBName'])) { $useDBNames[] = $name; } } if ($individual->formal_title && !empty($params['preserveDBName'])) { $useDBNames[] = 'formal_title'; } // CRM-4430 //1. preserve db name if want //2. lets get value from param if exists. //3. if not in params, lets get from db. foreach (array('last', 'middle', 'first', 'nick') as $name) { $phpName = "{$name}Name"; $dbName = "{$name}_name"; $value = $individual->{$dbName}; if (in_array($name, $useDBNames)) { $params[$dbName] = $value; $contact->{$dbName} = $value; ${$phpName} = $value; } elseif (array_key_exists($dbName, $params)) { ${$phpName} = $params[$dbName]; } elseif ($value) { ${$phpName} = $value; } } foreach (array('prefix', 'suffix') as $name) { $dbName = "{$name}_id"; $value = $individual->{$dbName}; if (in_array($name, $useDBNames)) { $params[$dbName] = $value; $contact->{$dbName} = $value; if ($value) { ${$name} = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', $dbName, $value); } else { ${$name} = NULL; } } elseif (array_key_exists($dbName, $params)) { // CRM-5278 if (!empty($params[$dbName])) { ${$name} = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', $dbName, $params[$dbName]); } } elseif ($value) { ${$name} = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', $dbName, $value); } } if (in_array('formal_title', $useDBNames)) { $params['formal_title'] = $individual->formal_title; $contact->formal_title = $individual->formal_title; $formalTitle = $individual->formal_title; } elseif (array_key_exists('formal_title', $params)) { $formalTitle = $params['formal_title']; } elseif ($individual->formal_title) { $formalTitle = $individual->formal_title; } } } //first trim before further processing. foreach (array('lastName', 'firstName', 'middleName') as $fld) { ${$fld} = trim(${$fld}); } if ($lastName || $firstName || $middleName) { // make sure we have values for all the name fields. $formatted = $params; $nameParams = array('first_name' => $firstName, 'middle_name' => $middleName, 'last_name' => $lastName, 'nick_name' => $nickName, 'individual_suffix' => $suffix, 'individual_prefix' => $prefix, 'prefix_id' => $prefix_id, 'suffix_id' => $suffix_id, 'formal_title' => $formalTitle); // make sure we have all the name fields. foreach ($nameParams as $name => $value) { if (empty($formatted[$name]) && $value) { $formatted[$name] = $value; } } $tokens = array(); CRM_Utils_Hook::tokens($tokens); $tokenFields = array(); foreach ($tokens as $catTokens) { foreach ($catTokens as $token => $label) { $tokenFields[] = $token; } } //build the sort name. $format = Civi::settings()->get('sort_name_format'); $sortName = CRM_Utils_Address::format($formatted, $format, FALSE, FALSE, TRUE, $tokenFields); $sortName = trim($sortName); //build the display name. $format = Civi::settings()->get('display_name_format'); $displayName = CRM_Utils_Address::format($formatted, $format, FALSE, FALSE, TRUE, $tokenFields); $displayName = trim($displayName); } //start further check for email. if (empty($sortName) || empty($displayName)) { $email = NULL; if (!empty($params['email']) && is_array($params['email'])) { foreach ($params['email'] as $emailBlock) { if (isset($emailBlock['is_primary'])) { $email = $emailBlock['email']; break; } } } $uniqId = CRM_Utils_Array::value('user_unique_id', $params); if (!$email && $contact->id) { $email = CRM_Contact_BAO_Contact::getPrimaryEmail($contact->id); } } //now set the names. $names = array('displayName' => 'display_name', 'sortName' => 'sort_name'); foreach ($names as $value => $name) { if (empty(${$value})) { if ($email) { ${$value} = $email; } elseif ($uniqId) { ${$value} = $uniqId; } elseif (!empty($params[$name])) { ${$value} = $params[$name]; } elseif ($displayName) { ${$value} = $displayName; } } //finally if we could not pass anything lets keep db. if (!empty(${$value})) { $contact->{$name} = ${$value}; } } $format = CRM_Utils_Date::getDateFormat('birth'); if ($date = CRM_Utils_Array::value('birth_date', $params)) { if (in_array($format, array('dd-mm', 'mm/dd'))) { $separator = '/'; if ($format == 'dd-mm') { $separator = '-'; } $date = $date . $separator . '1902'; } elseif (in_array($format, array('yy-mm'))) { $date = $date . '-01'; } elseif (in_array($format, array('M yy'))) { $date = $date . '-01'; } elseif (in_array($format, array('yy'))) { $date = $date . '-01-01'; } $contact->birth_date = CRM_Utils_Date::processDate($date); } elseif ($contact->birth_date) { $contact->birth_date = CRM_Utils_Date::isoToMysql($contact->birth_date); } if ($date = CRM_Utils_Array::value('deceased_date', $params)) { if (in_array($format, array('dd-mm', 'mm/dd'))) { $separator = '/'; if ($format == 'dd-mm') { $separator = '-'; } $date = $date . $separator . '1902'; } elseif (in_array($format, array('yy-mm'))) { $date = $date . '-01'; } elseif (in_array($format, array('M yy'))) { $date = $date . '-01'; } elseif (in_array($format, array('yy'))) { $date = $date . '-01-01'; } $contact->deceased_date = CRM_Utils_Date::processDate($date); } elseif ($contact->deceased_date) { $contact->deceased_date = CRM_Utils_Date::isoToMysql($contact->deceased_date); } if ($middle_name = CRM_Utils_Array::value('middle_name', $params)) { $contact->middle_name = $middle_name; } return $contact; }
/** * Function is used to format the individual contact values * * @param array $params (reference ) an assoc array of name/value pairs * @param array $contact contact object * * @return object CRM_Contact_BAO_Contact object * @access public * @static */ static function format(&$params, &$contact) { if (!self::dataExists($params)) { return; } $sortName = ""; $firstName = CRM_Utils_Array::value('first_name', $params, ''); $middleName = CRM_Utils_Array::value('middle_name', $params, ''); $lastName = CRM_Utils_Array::value('last_name', $params, ''); $prefix_id = CRM_Utils_Array::value('prefix_id', $params, ''); $suffix_id = CRM_Utils_Array::value('suffix_id', $params, ''); // get prefix and suffix names $prefixes = CRM_Core_PseudoConstant::individualPrefix(); $suffixes = CRM_Core_PseudoConstant::individualSuffix(); $prefix = $suffix = null; if ($prefix_id) { $prefix = $prefixes[$prefix_id]; } if ($suffix_id) { $suffix = $suffixes[$suffix_id]; } $params['is_deceased'] = CRM_Utils_Array::value('is_deceased', $params, false); if ($contact->id) { $individual =& new CRM_Contact_BAO_Contact(); $individual->id = $contact->id; if ($individual->find(true)) { //lets allow to update single name field though preserveDBName //but if db having null value and params contain value, CRM-4330. $useDBNames = array(); foreach (array('last', 'middle', 'first') as $name) { $dbName = "{$name}_name"; $value = $individual->{$dbName}; // the db has name values if ($value && CRM_Utils_Array::value('preserveDBName', $params)) { $useDBNames[] = $name; } } foreach (array('prefix', 'suffix') as $name) { $dbName = "{$name}_id"; $value = $individual->{$dbName}; if ($value && CRM_Utils_Array::value('preserveDBName', $params)) { $useDBNames[] = $name; } } // CRM-4430 //1. preserve db name if want //2. lets get value from param if exists. //3. if not in params, lets get from db. foreach (array('last', 'middle', 'first') as $name) { $phpName = "{$name}Name"; $dbName = "{$name}_name"; $value = $individual->{$dbName}; if (in_array($name, $useDBNames)) { $params[$dbName] = $value; $contact->{$dbName} = $value; ${$phpName} = $value; } else { if (array_key_exists($dbName, $params)) { ${$phpName} = $params[$dbName]; } else { if ($value) { ${$phpName} = $value; } } } } foreach (array('prefix', 'suffix') as $name) { $phpName = $name; $dbName = "{$name}_id"; $vals = "{$name}es"; $value = $individual->{$dbName}; if (in_array($name, $useDBNames)) { $params[$dbName] = $value; $contact->{$dbName} = $value; if ($value) { $temp = ${$vals}; ${$phpName} = $temp[$value]; } else { ${$phpName} = null; } } else { if (array_key_exists($dbName, $params)) { $temp = ${$vals}; // CRM-5278 if (!empty($params[$dbName])) { ${$phpName} = CRM_Utils_Array::value($params[$dbName], $temp); } } else { if ($value) { $temp = ${$vals}; ${$phpName} = $temp[$value]; } } } } } } if ($lastName || $firstName || $middleName) { if ($lastName && $firstName) { $contact->sort_name = trim("{$lastName}, {$firstName}"); } else { $contact->sort_name = trim("{$lastName} {$firstName}"); } $display_name = trim("{$prefix} {$firstName} {$middleName} {$lastName} {$suffix}"); $display_name = str_replace(' ', ' ', $display_name); } if (isset($display_name) && trim($display_name)) { $contact->display_name = trim($display_name); } if (CRM_Utils_Array::value('email', $params) && is_array($params['email'])) { foreach ($params['email'] as $emailBlock) { if (isset($emailBlock['is_primary'])) { $email = $emailBlock['email']; break; } } } $uniqId = CRM_Utils_Array::value('user_unique_id', $params); if (empty($contact->display_name)) { if (isset($email)) { $contact->display_name = $email; } else { if (isset($uniqId)) { $contact->display_name = $uniqId; } } } if (empty($contact->sort_name)) { if (isset($email)) { $contact->sort_name = $email; } else { if (isset($uniqId)) { $contact->sort_name = $uniqId; } } } $format = CRM_Utils_Date::getDateFormat('birth'); if ($date = CRM_Utils_Array::value('birth_date', $params)) { if (in_array($format, array('dd-mm', 'mm/dd'))) { $separator = '/'; if ($format == 'dd-mm') { $separator = '-'; } $date = $date . $separator . '1902'; } else { if (in_array($format, array('yy-mm'))) { $date = $date . '-01'; } else { if (in_array($format, array('M yy'))) { $date = '01 ' . $date; } else { if (in_array($format, array('yy'))) { $date = $date . '-01-01'; } } } } $contact->birth_date = CRM_Utils_Date::processDate($date); } else { if ($contact->birth_date) { $contact->birth_date = CRM_Utils_Date::isoToMysql($contact->birth_date); } } if ($date = CRM_Utils_Array::value('deceased_date', $params)) { if (in_array($format, array('dd-mm', 'mm/dd'))) { $separator = '/'; if ($format == 'dd-mm') { $separator = '-'; } $date = $date . $separator . '1902'; } else { if (in_array($format, array('yy-mm'))) { $date = $date . '-01'; } else { if (in_array($format, array('M yy'))) { $date = '01 ' . $date; } else { if (in_array($format, array('yy'))) { $date = $date . '-01-01'; } } } } $contact->deceased_date = CRM_Utils_Date::processDate($date); } else { if ($contact->deceased_date) { $contact->deceased_date = CRM_Utils_Date::isoToMysql($contact->deceased_date); } } if ($middle_name = CRM_Utils_Array::value('middle_name', $params)) { $contact->middle_name = $middle_name; } return $contact; }
/** * Function is used to format the individual contact values * * @param array $params (reference ) an assoc array of name/value pairs * @param array $contact contact object * * @return object CRM_Contact_BAO_Contact object * @access public * @static */ static function format(&$params, &$contact) { if (!self::dataExists($params)) { return; } $sortName = $displayName = ""; $firstName = CRM_Utils_Array::value('first_name', $params, ''); $middleName = CRM_Utils_Array::value('middle_name', $params, ''); $lastName = CRM_Utils_Array::value('last_name', $params, ''); $prefix_id = CRM_Utils_Array::value('prefix_id', $params, ''); $suffix_id = CRM_Utils_Array::value('suffix_id', $params, ''); // get prefix and suffix names $prefixes = CRM_Core_PseudoConstant::individualPrefix(); $suffixes = CRM_Core_PseudoConstant::individualSuffix(); $prefix = $suffix = null; if ($prefix_id) { $prefix = $prefixes[$prefix_id]; $params['individual_prefix'] = $prefix; } if ($suffix_id) { $suffix = $suffixes[$suffix_id]; $params['individual_suffix'] = $suffix; } $params['is_deceased'] = CRM_Utils_Array::value('is_deceased', $params, false); $individual = null; if ($contact->id) { $individual = new CRM_Contact_BAO_Contact(); $individual->id = $contact->id; if ($individual->find(true)) { //lets allow to update single name field though preserveDBName //but if db having null value and params contain value, CRM-4330. $useDBNames = array(); foreach (array('last', 'middle', 'first') as $name) { $dbName = "{$name}_name"; $value = $individual->{$dbName}; // the db has name values if ($value && CRM_Utils_Array::value('preserveDBName', $params)) { $useDBNames[] = $name; } } foreach (array('prefix', 'suffix') as $name) { $dbName = "{$name}_id"; $value = $individual->{$dbName}; if ($value && CRM_Utils_Array::value('preserveDBName', $params)) { $useDBNames[] = $name; } } // CRM-4430 //1. preserve db name if want //2. lets get value from param if exists. //3. if not in params, lets get from db. foreach (array('last', 'middle', 'first') as $name) { $phpName = "{$name}Name"; $dbName = "{$name}_name"; $value = $individual->{$dbName}; if (in_array($name, $useDBNames)) { $params[$dbName] = $value; $contact->{$dbName} = $value; ${$phpName} = $value; } else { if (array_key_exists($dbName, $params)) { ${$phpName} = $params[$dbName]; } else { if ($value) { ${$phpName} = $value; } } } } foreach (array('prefix', 'suffix') as $name) { $phpName = $name; $dbName = "{$name}_id"; $vals = "{$name}es"; $value = $individual->{$dbName}; if (in_array($name, $useDBNames)) { $params[$dbName] = $value; $contact->{$dbName} = $value; if ($value) { $temp = ${$vals}; ${$phpName} = $temp[$value]; } else { ${$phpName} = null; } } else { if (array_key_exists($dbName, $params)) { $temp = ${$vals}; // CRM-5278 if (!empty($params[$dbName])) { ${$phpName} = CRM_Utils_Array::value($params[$dbName], $temp); } } else { if ($value) { $temp = ${$vals}; ${$phpName} = $temp[$value]; } } } } } } //first trim before further processing. foreach (array('lastName', 'firstName', 'middleName') as $fld) { ${$fld} = trim(${$fld}); } if ($lastName || $firstName || $middleName) { // make sure we have values for all the name fields. $formatted = $params; $nameParams = array('first_name' => $firstName, 'middle_name' => $middleName, 'last_name' => $lastName, 'individual_suffix' => $suffix, 'individual_prefix' => $prefix, 'prefix_id' => $prefix_id, 'suffix_id' => $suffix_id); // make sure we have all the name fields. foreach ($nameParams as $name => $value) { if (!CRM_Utils_Array::value($name, $formatted) && $value) { $formatted[$name] = $value; } } // make sure we have values for all the name fields. $formatted = $params; $nameParams = array('first_name' => $firstName, 'middle_name' => $middleName, 'last_name' => $lastName, 'individual_suffix' => $suffix, 'individual_prefix' => $prefix, 'prefix_id' => $prefix_id, 'suffix_id' => $suffix_id); // make sure we have all the name fields. foreach ($nameParams as $name => $value) { if (!CRM_Utils_Array::value($name, $formatted) && $value) { $formatted[$name] = $value; } } $tokens = array(); CRM_Utils_Hook::tokens($tokens); $tokenFields = array(); foreach ($tokens as $category => $catTokens) { foreach ($catTokens as $token) { $tokenFields[] = $token; } } require_once 'CRM/Utils/Address.php'; require_once 'CRM/Core/BAO/Preferences.php'; //build the sort name. $format = CRM_Core_BAO_Preferences::value('sort_name_format'); $format = str_replace('contact.', '', $format); $sortName = CRM_Utils_Address::format($formatted, $format, false, false, true, $tokenFields); $sortName = trim($sortName); //build the display name. $format = CRM_Core_BAO_Preferences::value('display_name_format'); $format = str_replace('contact.', '', $format); $displayName = CRM_Utils_Address::format($formatted, $format, false, false, true, $tokenFields); $displayName = trim($displayName); } //start further check for email. if (empty($sortName) || empty($displayName)) { $email = null; if (CRM_Utils_Array::value('email', $params) && is_array($params['email'])) { foreach ($params['email'] as $emailBlock) { if (isset($emailBlock['is_primary'])) { $email = $emailBlock['email']; break; } } } $uniqId = CRM_Utils_Array::value('user_unique_id', $params); if (!$email && $contact->id) { $email = CRM_Contact_BAO_Contact::getPrimaryEmail($contact->id); } } //now set the names. $names = array('sortName' => 'sort_name', 'displayName' => 'display_name'); foreach ($names as $value => $name) { if (empty(${$value})) { if ($email) { ${$value} = $email; } else { if ($uniqId) { ${$value} = $uniqId; } } } //finally if we could not pass anything lets keep db. if (!empty(${$value})) { $contact->{$name} = ${$value}; } } $format = CRM_Utils_Date::getDateFormat('birth'); if ($date = CRM_Utils_Array::value('birth_date', $params)) { if (in_array($format, array('dd-mm', 'mm/dd'))) { $separator = '/'; if ($format == 'dd-mm') { $separator = '-'; } $date = $date . $separator . '1902'; } else { if (in_array($format, array('yy-mm'))) { $date = $date . '-01'; } else { if (in_array($format, array('M yy'))) { $date = '01 ' . $date; } else { if (in_array($format, array('yy'))) { $date = $date . '-01-01'; } } } } $contact->birth_date = CRM_Utils_Date::processDate($date); } else { if ($contact->birth_date) { $contact->birth_date = CRM_Utils_Date::isoToMysql($contact->birth_date); } } if ($date = CRM_Utils_Array::value('deceased_date', $params)) { if (in_array($format, array('dd-mm', 'mm/dd'))) { $separator = '/'; if ($format == 'dd-mm') { $separator = '-'; } $date = $date . $separator . '1902'; } else { if (in_array($format, array('yy-mm'))) { $date = $date . '-01'; } else { if (in_array($format, array('M yy'))) { $date = '01 ' . $date; } else { if (in_array($format, array('yy'))) { $date = $date . '-01-01'; } } } } $contact->deceased_date = CRM_Utils_Date::processDate($date); } else { if ($contact->deceased_date) { $contact->deceased_date = CRM_Utils_Date::isoToMysql($contact->deceased_date); } } if ($middle_name = CRM_Utils_Array::value('middle_name', $params)) { $contact->middle_name = $middle_name; } return $contact; }