Beispiel #1
0
 /**
  * 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;
 }
Beispiel #2
0
 /**
  * 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;
 }
Beispiel #3
0
 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;
 }
Beispiel #4
0
 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;
 }
Beispiel #5
0
 /**
  * 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];
 }
Beispiel #6
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();
 }
Beispiel #7
0
 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();
 }