/** * Find duplicates for given org_openpsa_contacts_person_dba object * @param org_openpsa_contacts_person_dba $person object (does not need id) * @return array array of possible duplicates */ function find_duplicates_person($person, $threshold = 1) { $this->p_map = array(); //Make sure this is clean before starting $ret = array(); //Search for all potential duplicates (more detailed checking is done later) $qb = org_openpsa_contacts_person_dba::new_query_builder(); if ($person->id) { $qb->add_constraint('id', '<>', $person->id); } // TODO: Avoid persons marked as not_duplicate already in this phase. $qb->begin_group('OR'); //Shared firstname if ($person->firstname) { $qb->add_constraint('firstname', 'LIKE', $person->firstname); } //Shared lastname if ($person->lastname) { $qb->add_constraint('lastname', 'LIKE', $person->lastname); } //Shared email if ($person->email) { $qb->add_constraint('email', 'LIKE', $person->email); } //Shared handphone if ($person->handphone) { $qb->add_constraint('handphone', 'LIKE', $person->handphone); } //Shared city if ($person->city) { $qb->add_constraint('city', 'LIKE', $person->city); } //Shared street if ($person->street) { $qb->add_constraint('street', 'LIKE', $person->street); } //Shared homephone if ($person->homephone) { $qb->add_constraint('homephone', 'LIKE', $person->homephone); } $qb->end_group(); $check_persons = $qb->execute(); if (!is_array($check_persons)) { return false; } foreach ($check_persons as $check_person) { $p_array = $this->p_duplicate_person($person, $check_person); $this->p_map[$check_person->guid] = $p_array; if ($p_array['p'] >= $threshold) { $ret[] = $check_person; } } return $ret; }
/** * Prepares the component's indexer client */ public function _on_reindex($topic, $config, &$indexer) { $qb_organisations = org_openpsa_contacts_group_dba::new_query_builder(); $qb_organisations->add_constraint('orgOpenpsaObtype', '<>', org_openpsa_contacts_group_dba::MYCONTACTS); $organisation_schema = midcom_helper_datamanager2_schema::load_database($config->get('schemadb_group')); $qb_persons = org_openpsa_contacts_person_dba::new_query_builder(); $person_schema = midcom_helper_datamanager2_schema::load_database($config->get('schemadb_person')); $indexer = new org_openpsa_contacts_midcom_indexer($topic, $indexer); $indexer->add_query('organisations', $qb_organisations, $organisation_schema); $indexer->add_query('persons', $qb_persons, $person_schema); return $indexer; }
private function get_person_qb($kept = false) { $qb = org_openpsa_contacts_person_dba::new_query_builder(); if ($kept) { $qb->begin_group('OR'); $qb->add_constraint('metadata.revised', '>=', $this->get_deletion_timestamp()); $qb->add_constraint('username', '<>', ''); $qb->end_group(); } else { $qb->add_constraint('metadata.revised', '<', $this->get_deletion_timestamp()); // Don't delete OpenPSA users $qb->add_constraint('username', '=', ''); } return $qb; }
private function _import_subscribers_person($subscriber) { $person = null; if ($this->_config->get('csv_import_check_duplicates')) { if (array_key_exists('email', $subscriber['person']) && $subscriber['person']['email']) { // Perform a simple email test. More complicated duplicate checking is best left to the o.o.contacts duplicate checker $qb = org_openpsa_contacts_person_dba::new_query_builder(); $qb->add_constraint('email', '=', $subscriber['person']['email']); $persons = $qb->execute_unchecked(); if (count($persons) > 0) { // Match found, use it $person = $persons[0]; } } if (!$person && array_key_exists('handphone', $subscriber['person']) && $subscriber['person']['handphone']) { // Perform a simple cell phone test. More complicated duplicate checking is best left to the o.o.contacts duplicate checker $qb = org_openpsa_contacts_person_dba::new_query_builder(); $qb->add_constraint('handphone', '=', $subscriber['person']['handphone']); $persons = $qb->execute_unchecked(); if (count($persons) > 0) { // Match found, use it $person = $persons[0]; } } } if (!$person) { // We didn't have person matching the email in DB. Create a new one. $person = new org_openpsa_contacts_person_dba(); // Populate at least one field for the new person if (isset($subscriber['person']) && isset($subscriber['person']['email'])) { $person->email = $subscriber['person']['email']; } if (!$person->create()) { $this->_request_data['new_objects']['person'] =& $person; debug_add("Failed to create person, reason " . midcom_connection::get_error_string()); $this->_request_data['import_status']['failed_create']++; return false; // This will skip to next } } if (!$this->_datamanager_process('person', $subscriber, $person)) { return false; } return $person; }
/** * Finds a person by username * * Returns full object or false in case of failure. * * @param string username * @return object person */ private function _find_person_by_name($username) { if (empty($username)) { return false; } midcom::get('auth')->request_sudo(); $qb = org_openpsa_contacts_person_dba::new_query_builder(); $qb->add_constraint('username', '=', $username); $persons = $qb->execute(); midcom::get('auth')->drop_sudo(); if (empty($persons)) { // Error getting user object return false; } return $persons[0]; }
/** * Does a QB query for persons, returns false or number of matched entries */ private function _search_qb_persons() { if (!$this->_query_string) { return false; } $qb = org_openpsa_contacts_person_dba::new_query_builder(); // Search using only the fields defined in config $person_fields = explode(',', $this->_config->get('person_search_fields')); if (!is_array($person_fields) || count($person_fields) == 0) { throw new midcom_error('Invalid person search configuration'); } $this->_apply_constraints($qb, $person_fields); $this->_persons = $qb->execute(); }
public function list_members() { $group = $this->_get_group(); if (!$group) { return array(); } $memberships = $group->list_members(); if (sizeof($memberships) == 0) { return array(); } $qb = org_openpsa_contacts_person_dba::new_query_builder(); $qb->add_constraint('id', 'IN', $memberships); return $qb->execute(); }