4.4
diff --git a/utils/GreetingHelper.php b/utils/GreetingHelper.php
new file mode 100644
index 0000000..aa3bf64
--- /dev/null
+++ b/utils/GreetingHelper.php
@@ -0,0 +1,957 @@
+
Inside process_spouses: ".$id_list;
+ $sqlstr = "SELECT rel.contact_id_a as cid_a, rel.contact_id_b as cid_b, c1.prefix_id , c1.first_name, c1.nick_name,
+ c1.last_name, c1.suffix_id, c1.birth_date, c1.gender_id, c1.is_deceased , c2.prefix_id as spouse_prefix_id,
+ c2.first_name as spouse_first_name, c2.nick_name as spouse_nick_name, c2.last_name as spouse_last_name, c2.suffix_id as spouse_suffix_id, c2.gender_id as spouse_gender_id, c2.is_deceased as spouse_is_deceased
+ FROM civicrm_relationship AS rel
+ JOIN (
+ civicrm_contact AS c1,
+ civicrm_contact AS c2,
+ civicrm_relationship_type AS reltype)
+ ON rel.contact_id_a = c1.id
+ AND rel.contact_id_b = c2.id
+ AND rel.relationship_type_id = reltype.id
+ WHERE ( lower(name_a_b) LIKE '%spouse%' OR lower(name_a_b) LIKE '%partner%' )
+ and rel.is_active = 1
+ AND (rel.contact_id_a in ( $id_list) or rel.contact_id_b in ( $id_list ) )
+ AND c1.is_deleted <> 1 and c2.is_deleted <> 1
+ AND c1.is_deceased <> 1 AND c2.is_deceased <> 1
+ group by rel.contact_id_a , rel.contact_id_b , c1.prefix_id , c1.first_name, c1.last_name
+ order by rel.contact_id_b, c1.birth_date ";
+
+
+
+ $contact_dao =& CRM_Core_DAO::executeQuery( $sqlstr );
+
+ // print "
sql: ".$sqlstr;
+ $i = 0;
+
+ //Lets get greetings for spouses.
+ while ( $contact_dao->fetch( ) ) {
+ $i = $i + 1;
+ // Load up cur_contact with current record data
+ // print "
record :".$i;
+ $prefix_id = $contact_dao->prefix_id;
+
+ if( strlen($prefix_id) > 0 ){
+ $prefix_label = $prefixes[$prefix_id];
+ }else{
+ $prefix_label = "";
+ }
+
+ $prefix_id_spouse = $contact_dao->spouse_prefix_id;
+
+ if( strlen( $prefix_id_spouse ) > 0 ){
+ $prefix_label_spouse = $prefixes[$prefix_id_spouse];
+ }else{
+ $prefix_label_spouse = "";
+ }
+
+ $suffix_id = $contact_dao->suffix_id;
+ if(strlen($suffix_id) > 0){
+ $suffix_label = $suffixes[$suffix_id];
+ }else{
+ $suffix_label = "";
+ }
+
+
+ $suffix_id_spouse = $contact_dao->spouse_suffix_id;
+ if(strlen( $suffix_id_spouse ) > 0 ){
+ $suffix_label_spouse = $suffixes[$suffix_id_spouse];
+ }else{
+ $suffix_label_spouse = "";
+ }
+
+
+
+ // deal with genders
+ $gender_id = $contact_dao->gender_id;
+ if ($gender_id == 1){
+ $gender_label = "Female";
+ }else{
+ $gender_label = "Male";
+ }
+
+ $spouse_gender_id = $contact_dao->spouse_gender_id;
+ if ($spouse_gender_id == 1){
+ $spouse_gender_label = "Female";
+ }else{
+ $spouse_gender_label = "Male";
+ }
+
+
+ $cur_contact_a["contact_id"] = $contact_dao->cid_a;
+ $cur_contact_a["prefix"] = $prefix_label;
+ $cur_contact_a["first_name"] = $contact_dao->first_name;
+ $cur_contact_a["nick_name"] = $contact_dao->nick_name;
+ $cur_contact_a["last_name"] = $contact_dao->last_name;
+ $cur_contact_a["suffix"] = $suffix_label;
+ $cur_contact_a["gender"]= $gender_label;
+ $cur_contact_a["is_deceased"] = $contact_dao->is_deceased;
+
+ // add cur_contact to the family array.
+ $current_family[] = $cur_contact_a ;
+
+ $cur_contact_b["contact_id"] = $contact_dao->cid_b;
+ $cur_contact_b["prefix"] = $prefix_label_spouse;
+ $cur_contact_b["first_name"] = $contact_dao->spouse_first_name;
+ $cur_contact_b["nick_name"] = $contact_dao->spouse_nick_name;
+ $cur_contact_b["last_name"] = $contact_dao->spouse_last_name;
+ $cur_contact_b["suffix"] = $suffix_label_spouse;
+ $cur_contact_b["gender"]= $spouse_gender_label;
+ $cur_contact_b["is_deceased"] = $contact_dao->spouse_is_deceased;
+
+
+
+ // add cur_contact to the family array.
+ $current_family[] = $cur_contact_b ;
+
+ // Add current household to family array if not empty.
+ if( $household_id <> '' ){
+ $cur_hh["contact_id"] = $household_id ;
+ $current_family[] = $cur_hh;
+ }
+ // print "
About to call process family greetings:
";
+ // print_r($current_family);
+
+ $this->process_family_greetings( $current_family, $values, $greetings_token_names);
+ $current_family = array();
+ //print "
";
+ //print_r($cur_contact);
+ }
+ // print "
Count ".$i;
+ $contact_dao->free( );
+
+
+
+}
+
+
+function greetings_determine_middle_content( $contact_id ){
+
+ $params = array(
+ 'version' => 3,
+ 'sequential' => 1,
+ 'contact_id' => $contact_id,
+ );
+ $result = civicrm_api('JointGreetings', 'getsingle', $params);
+
+ $middle_html = "";
+
+ $middle_html = $middle_html." Casual (nickname last name): | ".$result['greetings.joint_casual']." |
\n ";
+ $middle_html = $middle_html." Casual (first name last name): | ".$result['greetings.joint_casual_firstname_lastname']." |
\n ";
+ $middle_html = $middle_html." Casual (nickname): | ".$result['greetings.joint_casual_nickname_only']." |
\n ";
+
+ $middle_html = $middle_html." Casual (first name): | ".$result['greetings.joint_casual_firstname_only']." |
\n ";
+ $middle_html = $middle_html." Formal (prefix last name): | ".$result['greetings.joint_formal']." |
\n ";
+ $middle_html = $middle_html." Formal (prefix first name last name): | ".$result['greetings.joint_formal_firstname']." |
\n ";
+
+
+ return $middle_html;
+
+ /*
+ $middle_html = $middle_html." Solo Casual: | ".$result['greetings.solo_casual']." |
\n ";
+ $middle_html = $middle_html." Solo Casual nickname only: | ".$result['greetings.solo_casual_nickname_only']." |
\n ";
+ */
+
+}
+
+
+function greetings_determine_beginning_content( $label ){
+
+ $html_rtn = " \n
+ ";
+
+ return $html_rtn;
+
+
+}
+
+
+/*********************************************************************************
+ * Get the greetings for everyone in a single family.
+ *
+ *
+ **********************************************************************************/
+function process_family_greetings( &$family, &$values, $greetings_token_names){
+
+
+ $token_formal_short = $token_formal_long = $greetings_token_names['greetings.joint_formal'];
+ $token_formal_fn_short = $token_formal_fn_long = $greetings_token_names['greetings.joint_formal_firstname'];
+
+ // $token_firstname_only_short = $token_firstname_only_long = $greetings_token_names['greetings.joint_casual_firstname_only'];
+ // $token_name_long = $greetings_token_names['greetings.joint_casual'];
+
+ $token_joint_casual = $greetings_token_names['greetings.joint_casual'];
+ $token_joint_casual_firstname_only = $greetings_token_names['greetings.joint_casual_firstname_only'];
+ $token_joint_casual_firstname_lastname = $greetings_token_names['greetings.joint_casual_firstname_lastname'];
+ $token_joint_casual_nickname_only = $greetings_token_names['greetings.joint_casual_nickname_only'];
+
+
+
+ // get family greeting
+ $have_greeting = false;
+ $needed_greets = array();
+
+ foreach($family as $cur_contact){
+ $tmp_cid = $cur_contact['contact_id'];
+ //print "
tmp_cid: $tmp_cid";
+ if(array_key_exists($tmp_cid, $values)){
+
+ if(isset( $values[$tmp_cid][$token_joint_casual] )){
+ $test_greet = $values[$tmp_cid][$token_joint_casual];
+ }else{
+ $test_greet = "";
+ }
+ if($test_greet != ""){
+ $have_greeting = true;
+ $needed_greets['casual'] = $values[$tmp_cid][$token_joint_casual] ;
+ $needed_greets['casual_firstname_only'] = $values[$tmp_cid][$token_joint_casual_firstname_only] ;
+ $needed_greets['casual_firstname_lastname'] = $values[$tmp_cid][$token_joint_casual_firstname_lastname];
+ $needed_greets['casual_nickname_only'] = $values[$tmp_cid][$token_joint_casual_nickname_only] ;
+
+ $needed_greets['formal'] = $values[$tmp_cid][$token_formal_long] ;
+ $needed_greets['formal_firstname'] = $values[$tmp_cid][$token_formal_fn_long] ;
+ // print "
needed greets: casual_firstname_only: ".$needed_greets['casual_firstname_only'];
+ }
+
+ }
+ }
+
+
+
+ if($have_greeting == false){
+ if(count($family) == 1){
+
+ if( $family[0][spouse_last_name]){
+ // this is a married couple or a widow.
+ if($family[0]['is_deceased'] OR $family[0]['spouse_is_deceased'] ){
+ $needed_greets = $this->get_formatted_greeting_for_widow( $family[0]['prefix'], $family[0]['first_name'], $family[0]['last_name'], $family[0]['suffix'], $family[0]['gender'], $family[0]['is_deceased'], $family[0]['spouse_prefix'], $family[0]['spouse_first_name'], $family[0]['spouse_last_name'], $family[0]['spouse_suffix'], $family[0]['spouse_gender'], $family[0]['spouse_is_deceased'], $family[0]['nick_name'], $family[0]['spouse_nick_name'] );
+ }else{
+ $needed_greets = $this->get_formatted_greeting_for_couple( $family[0]['prefix'], $family[0]['first_name'], $family[0]['last_name'], $family[0]['suffix'], $family[0]['gender'], $family[0]['is_deceased'], $family[0]['spouse_prefix'], $family[0]['spouse_first_name'], $family[0]['spouse_last_name'], $family[0]['spouse_suffix'], $family[0]['spouse_gender'], $family[0]['spouse_is_deceased'], $family[0]['nick_name'], $family[0]['spouse_nick_name'] );
+ }
+ }else{
+ // this is a person in a one person household.
+ $uses_spouses_name = false;
+ $needed_greets = $this->get_formatted_greeting_for_single( $family[0]['prefix'], $family[0]['first_name'], $family[0]['last_name'], $family[0]['suffix'], $family[0]['gender'], $uses_spouses_name, $family[0]['nick_name'] );
+
+ }
+ }else if(count($family) >= 2){
+ if($family[0]['is_deceased'] OR $family[1]['is_deceased'] ){
+ $needed_greets = $this->get_formatted_greeting_for_widow( $family[0]['prefix'], $family[0]['first_name'], $family[0]['last_name'], $family[0]['suffix'], $family[0]['gender'], $family[0]['is_deceased'], $family[1]['prefix'], $family[1]['first_name'], $family[1]['last_name'], $family[1]['suffix'], $family[1]['gender'], $family[1]['is_deceased'] );
+ }else{
+ $needed_greets = $this->get_formatted_greeting_for_couple( $family[0]['prefix'], $family[0]['first_name'], $family[0]['last_name'], $family[0]['suffix'], $family[0]['gender'], $family[0]['is_deceased'], $family[1]['prefix'], $family[1]['first_name'], $family[1]['last_name'], $family[1]['suffix'], $family[1]['gender'], $family[1]['is_deceased'], $family[0]['nick_name'], $family[1]['nick_name'] );
+ }
+
+ }
+ }
+
+
+
+ // fill in family greeting for each contact.
+ $i =0;
+ foreach($family as $cur_contact){
+
+ // print "
cur contact: ";
+ // print_r( $cur_contact) ;
+ $family[$i]['needed_greets'] = $needed_greets ;
+
+
+ //$token_formal_long, $token_formal_short, $token_formal_fn_long, $token_formal_fn_short
+ $cur_cid = $cur_contact['contact_id'];
+
+ if(isset($cur_contact['hh_id'])){
+ $cur_hhid = $cur_contact['hh_id'];
+ }else{
+ $cur_hhid = "";
+ }
+
+ if(array_key_exists($cur_cid, $values)){
+ //print "
Contains $cur_cid use greeting: $greeting";
+ $values[$cur_cid][$token_joint_casual] = $needed_greets['casual'];
+ $values[$cur_cid][$token_formal_short] = $values[$cur_cid][$token_formal_long] = $needed_greets['formal'] ;
+ $values[$cur_cid][$token_formal_fn_short] = $values[$cur_cid][$token_formal_fn_long] = $needed_greets['formal_firstname'];
+
+ $values[$cur_cid][$token_joint_casual_firstname_only] = $needed_greets['casual_firstname_only'];
+ $values[$cur_cid][$token_joint_casual_firstname_lastname] = $needed_greets['casual_firstname_lastname'];
+ $values[$cur_cid][$token_joint_casual_nickname_only] = $needed_greets['casual_nickname_only'];
+ }else{
+ //print "
Does NOT Contain $cur_cid";
+ }
+
+ if(array_key_exists($cur_hhid, $values)){
+ //print "
Contains hhid $cur_hhid use greeting: $greeting";
+ $values[$cur_hhid][$token_joint_casual] = $needed_greets['casual'];
+ $values[$cur_hhid][$token_formal_short] = $values[$cur_hhid][$token_formal_long] = $needed_greets['formal'] ;
+ $values[$cur_hhid][$token_formal_fn_short] = $values[$cur_hhid][$token_formal_fn_long] = $needed_greets['formal_firstname'];
+
+
+ $values[$cur_hhid][$token_joint_casual_firstname_only] = $needed_greets['casual_firstname_only'];
+ $values[$cur_hhid][$token_joint_casual_firstname_lastname] = $needed_greets['casual_firstname_lastname'];
+ $values[$cur_hhid][$token_joint_casual_nickname_only] = $needed_greets['casual_nickname_only'];
+ }else{
+ // print "
Does NOT Contain hhid $cur_hhid";
+ }
+ $i = $i + 1;
+ }
+
+
+ // print "
End of process_family_greetings
";
+}
+
+
+function get_formatted_greeting_for_couple( $adult_a_prefix, $adult_a_first_name, $adult_a_last_name, $adult_a_suffix, $adult_a_gender, $adult_a_deceased, $adult_b_prefix, $adult_b_first_name, $adult_b_last_name, $adult_b_suffix, $adult_b_gender, $adult_b_deceased, $a_nick_name, $b_nick_name ){
+
+ $needed_greets = array();
+ $and_label = " and "; // English.
+
+ $b_has_real_title = false;
+
+ if( strlen($a_nick_name) > 0){
+ $a_casual_first_name = $a_nick_name;
+ }else{
+ $a_casual_first_name = $adult_a_first_name;
+ }
+
+
+ if( strlen($b_nick_name) > 0){
+ $b_casual_first_name = $b_nick_name;
+ }else{
+ $b_casual_first_name = $adult_b_first_name;
+ }
+
+ $needed_greets['casual_firstname_only'] = $adult_a_first_name.$and_label.$adult_b_first_name;
+ $needed_greets['casual_nickname_only'] = $a_casual_first_name.$and_label.$b_casual_first_name ;
+
+ if( $adult_a_last_name == $adult_b_last_name ){
+ // This couple shares a last name.
+ $uses_spouses_name = true;
+ $prefix_info_a = $this->determine_title($adult_a_prefix, $adult_a_gender, $uses_spouses_name);
+ $prefix_info_b = $this->determine_title($adult_b_prefix, $adult_b_gender, $uses_spouses_name);
+
+
+ if($prefix_info_b['real_title'] and !($prefix_info_a['real_title'])) {
+ $needed_greets['casual'] = $prefix_info_b['prefix']." ".$b_casual_first_name.$and_label.$a_casual_first_name." ".$adult_a_last_name;
+ $needed_greets['formal'] = $prefix_info_b['prefix'].$and_label.$prefix_info_a['prefix']." ".$adult_a_last_name;
+ }else if($prefix_info_a['real_title'] and !($prefix_info_b['real_title'])){
+ $needed_greets['casual'] = $prefix_info_a['prefix']." ".$a_casual_first_name.$and_label.$b_casual_first_name." ".$adult_a_last_name;
+ $needed_greets['formal'] = $prefix_info_a['prefix'].$and_label.$prefix_info_b['prefix']." ".$adult_a_last_name ;
+ }else if($prefix_info_a['real_title'] and $prefix_info_b['real_title']){
+ // both have real titles.
+ $needed_greets['casual'] = $prefix_info_a['prefix']." ".$a_casual_first_name.$and_label.$prefix_info_b['prefix']." ".$b_casual_first_name." ".$adult_a_last_name;
+ $needed_greets['formal'] = $prefix_info_a['prefix'].$and_label.$prefix_info_b['prefix']." ".$adult_a_last_name ;
+ }else{
+ // no one has a real title.
+ $needed_greets['casual'] = $a_casual_first_name.$and_label.$b_casual_first_name." ".$adult_a_last_name;
+ //
+ if($adult_b_gender == 'Male' ){
+ // Make sure Mr. is the start.
+ $needed_greets['formal'] = $prefix_info_b['prefix'].$and_label.$prefix_info_a['prefix']." ".$adult_a_last_name ;
+ }else{
+ $needed_greets['formal'] = $prefix_info_a['prefix'].$and_label.$prefix_info_b['prefix']." ".$adult_a_last_name ;
+ }
+ }
+ // deal with casual greetings that do not include title.
+ $needed_greets['casual_firstname_lastname'] = $adult_a_first_name.$and_label.$adult_b_first_name." ".$adult_b_last_name;
+
+ // Deal with formal greetings with first names. Such as Mr. and Mrs. John Smith
+ if( ($adult_a_gender == 'Male') and (!($prefix_info_b['real_title'])) and ($adult_b_gender == 'Female')){
+ $needed_greets['formal_firstname'] = $prefix_info_a['prefix'].$and_label.$prefix_info_b['prefix']." ".$adult_a_first_name." ".$adult_a_last_name." ".$adult_a_suffix;
+ }else if( $adult_b_gender == 'Male' and !($prefix_info_a['real_title']) and $adult_a_gender == 'Female'){
+ $needed_greets['formal_firstname'] = $prefix_info_b['prefix'].$and_label.$prefix_info_a['prefix']." ".$adult_b_first_name." ".$adult_b_last_name." ".$adult_b_suffix;
+ }else{
+ $needed_greets_a = $this->get_formatted_greeting_for_single( $adult_a_prefix, $adult_a_first_name, $adult_a_last_name, $adult_a_suffix, $adult_a_gender, $uses_spouses_name , $a_nick_name );
+ $needed_greets_b = $this->get_formatted_greeting_for_single( $adult_b_prefix, $adult_b_first_name, $adult_b_last_name, $adult_b_suffix, $adult_b_gender, $uses_spouses_name, $b_nick_name );
+ if($b_has_real_title) {
+ $needed_greets['formal_firstname'] = $needed_greets_b['formal_firstname'].$and_label.$needed_greets_a['formal_firstname'];
+ }else{
+ $needed_greets['formal_firstname'] = $needed_greets_a['formal_firstname'].$and_label.$needed_greets_b['formal_firstname'];
+ }
+ }
+
+ }else{
+ // the couple has different last names.
+ $uses_spouses_name = false;
+ $needed_greets_a = $this->get_formatted_greeting_for_single( $adult_a_prefix, $adult_a_first_name, $adult_a_last_name, $adult_a_suffix, $adult_a_gender, $uses_spouses_name, $a_nick_name );
+ $needed_greets_b = $this->get_formatted_greeting_for_single( $adult_b_prefix, $adult_b_first_name, $adult_b_last_name, $adult_b_suffix, $adult_b_gender, $uses_spouses_name, $b_nick_name );
+
+ $prefix_info_a = $this->determine_title($adult_a_prefix, $adult_a_gender, $uses_spouses_name);
+ $prefix_info_b = $this->determine_title($adult_b_prefix, $adult_b_gender, $uses_spouses_name);
+
+
+ if($prefix_info_b['real_title']){
+ $needed_greets['casual_firstname_only'] = $needed_greets_b['formal_firstname'].$and_label.$needed_greets_a['formal_firstname'];
+ $needed_greets['casual'] = $needed_greets_b['casual'].$and_label.$needed_greets_a['casual'];
+ $needed_greets['casual_firstname_lastname'] = $adult_b_first_name." ".$adult_b_last_name.$and_label.$adult_a_first_name." ".$adult_a_last_name;
+ $needed_greets['casual_nickname_only'] = $needed_greets_b['casual_nickname_only'].$and_label.$needed_greets_a['casual_nickname_only'];
+
+ $needed_greets['formal'] = $needed_greets_b['formal'].$and_label.$needed_greets_a['formal'];
+ $needed_greets['formal_firstname'] = $needed_greets_b['formal_firstname'].$and_label.$needed_greets_a['formal_firstname'];
+ }else{
+ $needed_greets['casual_firstname_only'] = $needed_greets_a['casual_firstname_only'].$and_label.$needed_greets_b['casual_firstname_only'];
+ $needed_greets['casual'] = $needed_greets_a['casual'].$and_label.$needed_greets_b['casual'];
+ $needed_greets['casual_firstname_lastname'] = $adult_a_first_name." ".$adult_a_last_name.$and_label.$adult_b_first_name." ".$adult_b_last_name;
+ $needed_greets['casual_nickname_only'] = $needed_greets_a['casual_nickname_only'].$and_label.$needed_greets_b['casual_nickname_only'];
+
+
+ $needed_greets['formal'] = $needed_greets_a['formal'].$and_label.$needed_greets_b['formal'];
+ $needed_greets['formal_firstname'] = $needed_greets_a['formal_firstname'].$and_label.$needed_greets_b['formal_firstname'];
+ }
+ } // end else
+
+ // print_r( $needed_greets);
+ return $needed_greets;
+}
+
+// format as a single person.
+function get_formatted_greeting_for_single($adult_prefix, $adult_first_name, $adult_last_name, $adult_suffix, $adult_gender, $uses_spouses_name, $nick_name ){
+
+ $needed_greets = array();
+
+ if( !($adult_last_name)){
+ if(strlen( $nick_name ) > 0){
+
+ $needed_greets['casual'] = $nick_name;
+ $needed_greets['casual_firstname_only'] = $adult_first_name;
+ $needed_greets['casual_firstname_lastname'] = $adult_first_name;
+ $needed_greets['casual_nickname_only'] = $nick_name;
+ }else{
+ $needed_greets['casual'] = $adult_first_name;
+ $needed_greets['casual_firstname_only'] = $adult_first_name;
+ $needed_greets['casual_firstname_lastname'] = $adult_first_name;
+ $needed_greets['casual_nickname_only'] = $adult_first_name;
+ }
+ $needed_greets['formal'] = $adult_first_name;
+ $needed_greets['formal_firstname'] = $adult_first_name;
+ return $needed_greets;
+
+ }
+
+ $prefix_info = $this->determine_title($adult_prefix, $adult_gender, $uses_spouses_name);
+
+ if($prefix_info['real_title']){
+ if(strlen( $nick_name ) > 0){
+ $needed_greets['casual'] = $prefix_info['prefix']." ".$nick_name." ".$adult_last_name." ".$adult_suffix;
+ $needed_greets['casual_firstname_only'] = $adult_first_name;
+ $needed_greets['casual_firstname_lastname'] = $adult_first_name." ".$adult_last_name;
+ $needed_greets['casual_nickname_only'] = $nick_name;
+ }else{
+ $needed_greets['casual'] = $prefix_info['prefix']." ".$adult_first_name." ".$adult_last_name." ".$adult_suffix;
+ $needed_greets['casual_firstname_only'] = $adult_first_name;
+ $needed_greets['casual_firstname_lastname'] = $adult_first_name." ".$adult_last_name;
+ $needed_greets['casual_nickname_only'] = $adult_first_name;
+ }
+ }else{
+ if(strlen( $nick_name ) > 0){
+ $needed_greets['casual'] = $nick_name." ".$adult_last_name." ".$adult_suffix;
+ $needed_greets['casual_firstname_only'] = $adult_first_name;
+ $needed_greets['casual_firstname_lastname'] = $adult_first_name." ".$adult_last_name;
+ $needed_greets['casual_nickname_only'] = $nick_name;
+ }else{
+ $needed_greets['casual'] = $adult_first_name." ".$adult_last_name." ".$adult_suffix;
+ $needed_greets['casual_firstname_only'] = $adult_first_name;
+ $needed_greets['casual_firstname_lastname'] = $adult_first_name." ".$adult_last_name;
+ $needed_greets['casual_nickname_only'] = $adult_first_name;
+ }
+ }
+
+ $needed_greets['formal'] = $prefix_info['prefix']." ".$adult_last_name." ".$adult_suffix ;
+ $needed_greets['formal_firstname'] = $prefix_info['prefix']." ".$adult_first_name." ".$adult_last_name." ".$adult_suffix ;
+
+ /*
+ if(strlen( $nick_name ) > 0){
+ $needed_greets['casual_firstname_only'] = $nick_name;
+ }else{
+ $needed_greets['casual_firstname_only'] = $adult_first_name;
+ }
+ */
+
+ return $needed_greets;
+}
+
+
+
+// Determine courtesy title for someone without a professional title.
+// For example, if someone is a doctor, then return the stored prefix ie Dr.
+// If someone doesn't have a title, return Mr or Ms
+function determine_title($prefix, $gender, $uses_spouses_name){
+
+ $prefix_info = array();
+ $prefix_info['real_title'] = false;
+
+ if(!($prefix) ){
+ $prefix_info['real_title'] = false;
+ if( $gender == 'Female' and $uses_spouses_name ){
+ $prefix = "Mrs.";
+ }else if($gender == 'Female'){
+ $prefix = "Ms.";
+ }else{
+ $prefix = "Mr.";
+ }
+ }else if( $prefix == 'Mr' or $prefix == 'Mr.' or $prefix == 'Mrs' or $prefix == 'Mrs.' or $prefix == 'Ms' or $prefix == 'Ms.' or $prefix == 'Miss'){
+ $prefix_info['real_title'] = false;
+ if($gender == 'Female' and $uses_spouses_name ){
+ // This means the woman shares her spouse's last name and may be part of "Mr and Mrs"
+ // It is never correct to write Mr. and Ms. Smith or Mr. and Ms. John Smith
+ $prefix = "Mrs.";
+ }
+
+ }else{
+ $prefix_info['real_title'] = true;
+
+ }
+
+ // Check if period is needed, due to typo in CiviCRM data.
+ if($prefix == 'Dr' or $prefix == 'Mr' or $prefix == 'Mrs' or $prefix == 'Ms'){
+ $prefix = "$prefix.";
+ }
+
+
+ $prefix_info['prefix'] = $prefix ;
+ return $prefix_info;
+}
+
+
+function process_households(&$suffixes, &$prefixes, &$values, &$contactIDs,$greetings_token_names ){
+
+
+ $token_name_long = $greetings_token_names['greetings.joint_casual'];
+ $token_formal_short = $token_formal_long = $greetings_token_names['greetings.joint_formal'];
+ $token_formal_fn_short = $token_formal_fn_long = $greetings_token_names['greetings.joint_formal_firstname'];
+
+ //print "
Inside process households
";
+
+ $i = 1;
+ $cid_list = "";
+ foreach ( $contactIDs as $cid ) {
+ $cid_list = $cid_list.$cid;
+ if( $i < count($contactIDs) ){
+ $cid_list = $cid_list.' ,';
+ }
+ $i = $i +1;
+ }
+
+
+ if($i == 1){
+
+ return;
+ }
+
+
+
+ $sqlstr = "SELECT r2.contact_id_a AS cid_a, r2.contact_id_b AS cid_b, c1.contact_type, c1.prefix_id, c1.first_name, c1.nick_name, c1.last_name, c1.suffix_id, c1.birth_date, name_a_b
+ FROM civicrm_relationship AS r1
+ JOIN (
+ civicrm_relationship AS r2, civicrm_contact AS c1, civicrm_relationship_type AS reltype
+ ) ON r1.contact_id_b = r2.contact_id_b
+ AND r2.contact_id_a = c1.id
+ AND r2.relationship_type_id = reltype.id
+ WHERE (reltype.name_a_b = 'Head of Household for' or reltype.name_a_b = 'Household Member of' )
+ AND r1.is_active =1
+ AND r2.is_active =1
+ and (r1.contact_id_a in ( $cid_list) or r1.contact_id_b in ( $cid_list ) )
+ and c1.is_deleted <> 1
+ GROUP BY r2.contact_id_a, r2.contact_id_b, c1.prefix_id, c1.first_name, c1.last_name, reltype.name_a_b
+ ORDER BY r2.contact_id_b, reltype.name_a_b, c1.birth_date ";
+
+ /*
+
+ $sqlstr = "SELECT r2.contact_id_a AS cid_a, r2.contact_id_b AS cid_b, c1.contact_type, c1.prefix_id, c1.first_name, c1.last_name,
+ c1.suffix_id, c1.birth_date, r3.contact_id_a, r3.contact_id_b, reltype.name_a_b , reltype3.name_a_b
+ FROM
+ civicrm_relationship AS r1 JOIN ( civicrm_relationship AS r2, civicrm_contact AS c1
+ civicrm_relationship_type AS reltype, civicrm_relationship as r3, civicrm_relationship_type AS reltype3 )
+ ON r1.contact_id_b = r2.contact_id_b AND r2.contact_id_a = c1.id AND r2.relationship_type_id = reltype.id and
+ (r2.contact_id_a = r3.contact_id_a or r2.contact_id_a = r3.contact_id_b) and r3.relationship_type_id = reltype3.id and
+ lower(reltype3.name_a_b) LIKE '%spouse%'
+ WHERE (reltype.name_a_b = 'Head of Household for' or reltype.name_a_b = 'Household Member of' ) AND r1.is_active =1
+ AND r2.is_active =1 and (r1.contact_id_a in ( $cid_list) or r1.contact_id_b in ( $cid_list ) ) GROUP BY r2.contact_id_a,
+ r2.contact_id_b, c1.prefix_id, c1.first_name, c1.last_name, reltype.name_a_b ORDER BY r2.contact_id_b, reltype.name_a_b, c1.birth_date";
+
+ */
+ // print "
sql: ".$sqlstr;
+
+ $contact_dao =& CRM_Core_DAO::executeQuery( $sqlstr );
+
+ $current_hh = array();
+ $last_hh_id = "";
+ //Lets get greetings for everyone in a household.
+ while ( $contact_dao->fetch( ) ) {
+
+ $cur_contact_id = $contact_dao->cid_a;
+ $cur_hh_id = $contact_dao->cid_b;
+
+
+ $tmp_contactIDs = array();
+ $tmp_contactIDs[] = $cur_contact_id ;
+
+
+ $this->process_spouses($suffixes, $prefixes, $values, $tmp_contactIDs, $greetings_token_names, $cur_hh_id );
+
+
+ }
+
+ $contact_dao->free( );
+
+
+
+
+}
+
+
+/**********************************************************************************************
+ * Get the greetings for people not in a household or spousal relationship.
+ *
+ *
+ *
+ ***********************************************************************************************/
+function process_singles(&$suffixes, &$prefixes, &$values, $greetings_token_names){
+
+ // print_r($values);
+
+ $token_formal_long = $greetings_token_names['greetings.joint_formal'];
+ $token_formal_fn_long = $greetings_token_names['greetings.joint_formal_firstname'];
+
+ $token_joint_casual = $greetings_token_names['greetings.joint_casual'];
+ $token_joint_casual_firstname_only = $greetings_token_names['greetings.joint_casual_firstname_only'];
+ $token_joint_casual_firstname_lastname = $greetings_token_names['greetings.joint_casual_firstname_lastname'];
+ $token_joint_casual_nickname_only = $greetings_token_names['greetings.joint_casual_nickname_only'];
+
+ $token_solo_casual = $greetings_token_names['greetings.solo_casual'];
+ $token_solo_casual_nickname_only = $greetings_token_names['greetings.solo_casual_nickname_only'];
+ $cid_list = "";
+ foreach ( $values as $cur_contact ) {
+ // print "
cur contact:";
+ // print_r($cur_contact);
+ // print "
current joint_greeting: ".$cur_contact['contact.joint_greeting'];
+ if(! (array_key_exists( $token_joint_casual , $cur_contact) ) ){
+ $cid = $cur_contact[contact_id];
+ if(strlen($cid_list) > 0 && strlen($cid) >0 ){
+ $cid_list = $cid_list.",";
+
+ }
+ $cid_list = "$cid_list $cid ";
+ }
+
+ }
+
+ if(strlen($cid_list) > 0 ){
+ $tmp_pos = strlen($cid_list) - 1;
+ $last = $cid_list[$tmp_pos] ;
+ }else{
+ $last = "";
+ }
+
+ if($last == ","){
+ $cid_list[strlen($cid_list)-1] = " ";
+ }
+ $cid_list = trim($cid_list);
+
+ //print "
cidlist length: ";
+ //print strlen($cid_list);
+ if( strlen($cid_list) > 0 ) {
+ $where_clause = " WHERE c.id in ( $cid_list) ";
+
+ $sqlstr = "(SELECT c.id, c.contact_type, c.prefix_id, c.first_name, c.nick_name, c.last_name, c.suffix_id, c.gender_id
+ FROM civicrm_contact AS c $where_clause and contact_type = 'Individual')
+ UNION
+ (SELECT c1.id, c1.contact_type, c2.prefix_id, c2.first_name, c2.nick_name, c2.last_name, c2.suffix_id, c2.gender_id
+ FROM civicrm_contact c1,civicrm_relationship r, civicrm_contact c2, civicrm_relationship_type rt
+ where c1.id in ($cid_list) and c1.id = r.contact_id_b and r.contact_id_a = c2.id and r.relationship_type_id = rt.id
+ and r.is_active = 1
+ and c1.contact_type = 'Household' and rt.name_a_b = 'Household Member of'
+ group by c1.id
+ having count(c1.id) = 1 )
+ UNION
+ (SELECT c1.id, c1.contact_type, c2.prefix_id, c2.first_name, c2.nick_name, c2.last_name, c2.suffix_id, c2.gender_id
+ FROM civicrm_contact c1,civicrm_relationship r, civicrm_contact c2, civicrm_relationship_type rt
+ where c1.id in ($cid_list) and c1.id = r.contact_id_b and r.contact_id_a = c2.id and r.relationship_type_id = rt.id
+ and r.is_active = 1
+ and c1.contact_type = 'Household' and rt.name_a_b = 'Head of Household for'
+ group by c1.id
+ having count(c1.id) = 1) " ;
+
+
+ $contact_dao =& CRM_Core_DAO::executeQuery( $sqlstr );
+
+ //Lets get greetings for singles
+ while ( $contact_dao->fetch( ) ) {
+ $cur_cid = $contact_dao->id;
+ $cur_contact_type = $contact_dao->contact_type;
+ $prefix_id = $contact_dao->prefix_id ;
+ $prefix_label = $prefixes[$prefix_id];
+
+ $suffix_id = $contact_dao->suffix_id ;
+ $suffix_label = $suffixes[$suffix_id];
+
+ // deal with genders
+ $gender_id = $contact_dao->gender_id;
+ if ($gender_id == 1){
+ $gender_label = "Female";
+ }else{
+ $gender_label = "Male";
+ }
+
+ $cur_prefix = $prefix_label;
+ $cur_first_name = $contact_dao->first_name;
+ $cur_last_name = $contact_dao->last_name;
+ $cur_gender = $gender_label;
+ $cur_nick_name = $contact_dao->nick_name;
+
+ //print "
contact type: $cur_contact_type";
+ if($cur_contact_type == 'Individual'){
+ $uses_spouses_name = false;
+ $needed_greets = $this->get_formatted_greeting_for_single($cur_prefix, $cur_first_name, $cur_last_name, $suffix_label, $gender_label, $uses_spouses_name , $cur_nick_name );
+ }else{
+ //$needed_greets = array();
+ //print "
Contact type household, what to do? ".$cur_cid;
+ $uses_spouses_name = false;
+ $needed_greets = $this->get_formatted_greeting_for_single($cur_prefix, $cur_first_name, $cur_last_name, $suffix_label, $gender_label, $uses_spouses_name , $cur_nick_name );
+
+
+
+ }
+
+
+ $values[$cur_cid][$token_joint_casual] = $needed_greets['casual'];
+ $values[$cur_cid][$token_formal_long] = $needed_greets['formal'];
+ $values[$cur_cid][$token_formal_fn_long] = $needed_greets['formal_firstname'];
+ $values[$cur_cid][$token_joint_casual_firstname_only] = $needed_greets['casual_firstname_only'];
+
+ $values[$cur_cid][$token_joint_casual_firstname_lastname] = $needed_greets['casual_firstname_lastname'];
+ $values[$cur_cid][$token_joint_casual_nickname_only] = $needed_greets['casual_nickname_only'];
+
+
+ }
+ $contact_dao->free( );
+
+ }else{
+ //print "
No contacts to process";
+ }
+
+ // handle solo greetings (including for married contacts)
+
+
+ //print "
cidlist length: ";
+ //print strlen($cid_list);
+ if( strlen($cid_list) > 0 ) {
+ $where_clause = " WHERE c.id in ( $cid_list) ";
+
+ $sql = " SELECT c.id, c.contact_type, c.prefix_id, c.first_name, c.nick_name, c.last_name, c.suffix_id, c.gender_id
+ FROM civicrm_contact AS c $where_clause and contact_type = 'Individual' ";
+
+ $contact_dao =& CRM_Core_DAO::executeQuery( $sql );
+
+ //Lets get greetings for singles
+ while ( $contact_dao->fetch( ) ) {
+ $cur_cid = $contact_dao->id;
+ $cur_contact_type = $contact_dao->contact_type;
+ $prefix_id = $contact_dao->prefix_id ;
+ $prefix_label = $prefixes[$prefix_id];
+
+ $suffix_id = $contact_dao->suffix_id ;
+ $suffix_label = $suffixes[$suffix_id];
+
+ // deal with genders
+ $gender_id = $contact_dao->gender_id;
+ if ($gender_id == 1){
+ $gender_label = "Female";
+ }else{
+ $gender_label = "Male";
+ }
+
+ $cur_prefix = $prefix_label;
+ $cur_first_name = $contact_dao->first_name;
+ $cur_last_name = $contact_dao->last_name;
+ $cur_gender = $gender_label;
+ $cur_nick_name = $contact_dao->nick_name;
+ //print "
contact type: $cur_contact_type";
+ if($cur_contact_type == 'Individual'){
+ $uses_spouses_name = false;
+ $needed_solo_greets = $this->get_formatted_greeting_for_single($cur_prefix, $cur_first_name, $cur_last_name, $suffix_label, $gender_label, $uses_spouses_name , $cur_nick_name );
+
+ $values[$cur_cid][$token_solo_casual] = $needed_solo_greets['casual'];
+ $values[$cur_cid][$token_solo_casual_nickname_only] = $needed_solo_greets['casual_nickname_only'];
+
+ }
+
+ }
+
+ }
+
+}
+
+
+/**********************************************************************************************
+ * Get the greetings for organizations
+ *
+ *
+ *
+ ***********************************************************************************************/
+function process_organizations(&$suffixes, &$prefixes, &$values, $greetings_token_names){
+
+
+ // print_r( $greetings_token_names );
+ $token_name_long = $greetings_token_names['greetings.joint_casual'];
+ // $token_formal_short = $token_formal_long = $greetings_token_names['greetings.joint_formal'];
+ // $token_formal_fn_short = $token_formal_fn_long = $greetings_token_names['greetings.joint_formal_firstname'];
+ // $token_firstname_only_short = $token_name_long = $greetings_token_names['greetings.joint_casual_firstname_only'];
+
+
+ //print "
first name only: ".$token_firstname_only_short;
+
+ $cid_list = "";
+ foreach ( $values as $cur_contact ) {
+ // print "
current joint_greeting: ".$cur_contact['contact.joint_greeting'];
+ if(! (array_key_exists( $token_name_long , $cur_contact) ) ){
+ $cid = $cur_contact['contact_id'];
+ if( strlen($cid_list) > 0 && strlen($cid) > 0 ){
+ $cid_list = "$cid_list,";
+ }
+ $cid_list = "$cid_list $cid";
+ }
+
+ }
+ if( strlen($cid_list ) > 0){
+ $last = $cid_list[strlen($cid_list)-1] ;
+ }else{
+ $last = "";
+ }
+
+ if($last == "," ){
+ $cid_list[strlen($cid_list)-1] = " ";
+ }
+
+ // print "
cidlist: ".$cid_list;
+ $cid_list = trim( $cid_list) ;
+ if( strlen($cid_list) > 0 ) {
+ $where_clause = " WHERE c.id in ( $cid_list) ";
+
+ $sqlstr = "SELECT c.id, c.contact_type, c.display_name as display_name
+ FROM civicrm_contact AS c $where_clause and c.contact_type = 'Organization' " ;
+
+ //print "
sql: ".$sqlstr;
+ $contact_dao =& CRM_Core_DAO::executeQuery( $sqlstr );
+
+
+ while ( $contact_dao->fetch( ) ) {
+ $cur_cid = $contact_dao->id;
+ $cur_contact_type = $contact_dao->contact_type;
+ $cur_display_name = $contact_dao->display_name;
+
+ foreach( $greetings_token_names as $cur_token_name){
+ $values[$cur_cid][$cur_token_name] = $cur_display_name;
+
+ }
+ // $values[$cur_cid][$token_name_long] = $cur_display_name;
+ // $values[$cur_cid][$token_formal_short] = $values[$cur_cid][$token_formal_long] = $cur_display_name;
+ // $values[$cur_cid][$token_formal_fn_short] = $values[$cur_cid][$token_formal_fn_long] = $cur_display_name;
+ // $values[$cur_cid][$token_firstname_only_short] = $values[$cur_cid][$token_firstname_only_short] = $cur_display_name;
+ }
+ $contact_dao->free( );
+
+ }
+
+}
+
+function get_all_prefixes(){
+
+ $sqlstr = "SELECT ov.label, ov.value FROM civicrm_option_group og join civicrm_option_value ov
+on og.id = ov.option_group_id
+where og.name = 'individual_prefix' ";
+
+ $prefix_dao =& CRM_Core_DAO::executeQuery( $sqlstr );
+
+ $prefixes = array();
+
+ while ( $prefix_dao->fetch( ) ) {
+ $curprefix_id = $prefix_dao->value;
+ $curprefix_label = $prefix_dao->label;
+
+ $prefixes[$curprefix_id] = $curprefix_label;
+
+ }
+
+ $prefix_dao->free( );
+
+ return $prefixes;
+}
+
+function get_all_suffixes(){
+
+ $sqlstr = "SELECT ov.label, ov.value FROM civicrm_option_group og join civicrm_option_value ov
+on og.id = ov.option_group_id
+where og.name = 'individual_suffix' ";
+
+ $suffix_dao =& CRM_Core_DAO::executeQuery( $sqlstr );
+
+ $suffixes = array();
+
+ while ( $suffix_dao->fetch( ) ) {
+ $cursuffix_id = $suffix_dao->value;
+ $cursuffix_label = $suffix_dao->label;
+
+ $suffixes[$cursuffix_id] = $cursuffix_label;
+
+ }
+
+ $suffix_dao->free( );
+
+ return $suffixes;
+
+
+}
+
+}
\ No newline at end of file