private function _find_duplicate(Group_Contact $contact) { /*1.联系人姓名相同,且有一个手机号码相同的,判断为同一个联系人, 自动进行合并处理,合并时需要判断好友关系、公司、部门、职位、生日、 昵称、头像这几个信息是否有冲突,如果没有冲突则可以合并两个联系人 */ $same_name_tel_tag = new Group_Contact(); $same_name_tel_tag->set_group_id($contact->get_group_id())->set_formatted_name($this->name_to_formatted_name($contact->get_family_name(), $contact->get_given_name()))->set_tels($contact->get_tels()); $result = $this->group_contact_mapper->find_by_tags($same_name_tel_tag); if (!empty($result)) { //冲突检测 foreach ($result as $id) { $find_contact = $this->find_by_id($contact->get_group_id(), $id); if ($find_contact->merge($contact)) { return $find_contact; } } } return FALSE; /* //2 两个联系人中有Email、IM、电话号码相同,其中一个没有姓名,在其他信息没有冲突情况下,可以合并 $same_email_tag = new Contact(); $same_email_tag->set_user_id($contact->get_user_id()) ->set_emails($contact->get_emails()); $result = $this->contact_mapper->find_by_tags($same_email_tag); if (! empty($result)) { //冲突检测 foreach ($result as $id) { $find_contact = $this->get($contact->get_user_id(), $id); if ($find_contact->merge($contact, $is_append)) { return $find_contact; } } } //3 所有信息完全相同的联系人,可以合并 $all_same_tag = new Contact(); $all_same_tag->set_user_id($contact->get_user_id()); $contact_array = $contact->to_array(); foreach ($contact_array as $key => $value) { if (! in_array($key, array('tels', 'emails', 'ims')) and ! empty($value)) { call_user_func(array($all_same_tag, 'set_' . $key), $value); } } $result = $this->contact_mapper->find_by_tags($all_same_tag); if (! empty($result)) { //冲突检测 foreach ($result as $id) { $find_contact = $this->get($contact->get_user_id(), $id); if ($contact_array == array_intersect_assoc( $find_contact->to_array(), $contact_array)) { return $find_contact; } } } return FALSE; */ }